Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah `mysql_real_escape_string` Benar-benar Selamat? Memeriksa Had Fungsi.

Adakah `mysql_real_escape_string` Benar-benar Selamat? Memeriksa Had Fungsi.

Patricia Arquette
Patricia Arquetteasal
2024-10-27 04:38:30364semak imbas

 Is `mysql_real_escape_string` Really Safe? Examining the Function's Limitations.

Kerentanan dalam Penggunaan mysql_real_escape_string

Walaupun ramai telah membangkitkan kebimbangan mengenai potensi risiko menggunakan mysql_real_escape_string untuk melindungi daripada serangan suntikan SQL, sedikit memberikan contoh konkrit yang menggambarkan batasannya. Untuk menangani perkara ini, mari kita selidiki kelemahan utama fungsi ini.

Penggunaan Salah

Satu perangkap biasa dalam menggunakan mysql_real_escape_string ialah salah pengendalian nilai berangka. Pertimbangkan kod berikut:

mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));

Di sini, input '5 OR 1=1' akan mengelak daripada perlindungan kerana mysql_real_escape_string direka untuk pembersihan rentetan, bukan nilai angka.

Konteks -Had Khusus

Satu lagi had mysql_real_escape_string terletak pada konteks penggunaan khususnya. Ia bertujuan untuk melepaskan nilai dalam rentetan yang disebut dalam pernyataan SQL, bukan untuk konteks lain seperti nilai yang tidak disebut atau secara langsung dalam sintaks SQL.

Sebagai contoh, kod berikut akan terdedah:

mysql_query("... `foo` = $value ...");

Seperti yang dibincangkan di atas, mysql_real_escape_string tidak akan digunakan dengan betul dalam senario ini.

Isu Pengekodan

Selain itu, tetapan pengekodan sambungan pangkalan data yang salah boleh membawa kepada kerentanan. Jika pengekodan sambungan ditetapkan menggunakan mysql_query("SET NAMES 'utf8'"), dan bukannya mysql_set_charset('utf8'), mysql_real_escape_string akan menganggap pengekodan aksara yang salah dan rentetan melarikan diri secara tidak sesuai. Ini boleh memudahkan serangan suntikan yang melibatkan rentetan berbilangbait.

Kesimpulan

Walaupun mysql_real_escape_string tidak mempunyai kelemahan yang wujud apabila digunakan dengan betul, kebimbangan utama terletak pada kecenderungannya terhadap penggunaan yang salah. Had yang dibincangkan di atas menggambarkan cabaran dalam menggunakan fungsi ini dengan berkesan, menjadikannya penting untuk mempertimbangkan pendekatan alternatif seperti pernyataan yang disediakan atau pertanyaan berparameter untuk memastikan perlindungan yang teguh terhadap serangan suntikan SQL.

Atas ialah kandungan terperinci Adakah `mysql_real_escape_string` Benar-benar Selamat? Memeriksa Had Fungsi.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn