mysql_real_escape_string: Had dan Penggunaan
Pengenalan
Manakala mysql_real_escape melindungi daripada Suntikan SQL, ia mempunyai batasan tertentu yang boleh meninggalkan aplikasi terdedah.
Penggunaan dan Had yang Betul
mysql_real_escape_string bertujuan untuk melepaskan kandungan teks yang digunakan sebagai nilai dalam petikan dalam pernyataan SQL. Penggunaannya secara tidak betul, seperti dalam nilai tidak disebut harga atau keseluruhan pernyataan SQL, boleh membawa kepada risiko suntikan.
Nilai Tidak Sah atau Tidak Boleh Dielak
Nilai angka dan input tidak disebut tidak boleh berkesan melarikan diri menggunakan mysql_real_escape_string. Untuk nilai berangka, penghantaran kepada jenis yang sesuai adalah disyorkan, manakala input yang tidak disebut harus dikendalikan sebagai rentetan dalam pertanyaan.
Contoh Penggunaan Yang Salah
mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));
Ini contoh tidak melindungi daripada suntikan SQL jika input termasuk "5 ATAU 1=1". Ia menganggap input sebagai nilai berangka apabila melarikan diri, walaupun pertanyaan menjangkakan rentetan. Pengendalian yang betul melibatkan pembalut input yang terlepas dalam petikan.
Kerentanan Halus
Satu lagi isu berpotensi timbul apabila menggunakan mysql_query("SET NAMES 'utf8'", $link) ke tetapkan pengekodan sambungan pangkalan data dan bukannya mysql_set_charset('utf8', $link). Ini mewujudkan ketidakpadanan antara pengekodan yang diandaikan oleh API pelanggan dan tafsiran pangkalan data, yang berpotensi membawa kepada kelemahan suntikan dengan rentetan berbilangbait.
Kesimpulan
mysql_real_escape_string mempunyai batasan asas, terutamanya dalam memastikan penggunaan yang betul. Adalah penting untuk memahami tujuan yang dimaksudkan dan mengelakkan penggunaannya secara salah. Pertimbangkan untuk menggunakan kaedah alternatif dan lebih selamat seperti pernyataan yang disediakan untuk perlindungan yang lebih baik terhadap suntikan SQL.
Atas ialah kandungan terperinci Adakah mysql_real_escape_string Mencukupi untuk Mencegah Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!