Kesilapan yang Perlu Dielakkan dengan mysql_real_escape_string
Walaupun merupakan kaedah yang biasa digunakan untuk mencegah suntikan SQL, mysql_real_escape_string boleh gagal melindungi daripada serangan jika digunakan dengan betul . Walaupun ia melarikan diri dengan cekap aksara khas dalam nilai rentetan, senario tertentu boleh timbul apabila keberkesanannya terjejas.
Penggunaan Betul: Nilai Rentetan Dipetik
mysql_real_escape_string hanya boleh digunakan apabila memasukkan kandungan teks yang disertakan dalam petikan dalam pernyataan SQL. Contohnya:
$value = mysql_real_escape_string($value, $link); $sql = "... `foo` = '$value' ...";
Penggunaan Salah
Aplikasi mysql_real_escape_string yang salah boleh membawa kepada kelemahan. Kesilapan biasa termasuk:
Pertimbangan Pengekodan
Satu lagi perangkap ialah salah konfigurasi pengekodan sambungan pangkalan data. Kaedah yang betul ialah:
mysql_set_charset('utf8', $link);
Walau bagaimanapun, menggunakan mysql_query("SET NAMES 'utf8'", $link) boleh menyebabkan percanggahan antara pengekodan yang diandaikan oleh mysql_ API dan pengekodan sebenar pangkalan data. Ini berpotensi membenarkan serangan suntikan yang melibatkan rentetan berbilangbait.
Kesimpulan
mysql_real_escape_string kekal sebagai alat yang berharga jika digunakan seperti yang dimaksudkan. Walau bagaimanapun, mengiktiraf hadnya dan menerapkannya dengan betul adalah penting untuk mengelakkan kelemahan suntikan SQL. Adalah disyorkan untuk meneroka alternatif yang lebih moden seperti pernyataan yang disediakan untuk meningkatkan keselamatan dan kemudahan penggunaan.
Atas ialah kandungan terperinci Adakah mysql_real_escape_string Cukup untuk Mencegah Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!