Artikel ini memperkenalkan perbedaan antara menggunakan mysql_real_escape_string untuk mengurutkan dan memproses data yang dikirimkan pengguna dan menggunakan tiga fungsi serupa: addlashes dan mysql_escape_string. Data yang lolos dapat dimasukkan langsung ke dalam database.
Ini adalah penjelasan yang bagus tentang perbedaan antara addlashes dan mysql_real_escape_string. Meskipun banyak pembuat kode PHP domestik masih mengandalkan addlashes untuk mencegah injeksi SQL (termasuk saya), saya tetap menyarankan agar semua orang memperkuat pemeriksaan untuk mencegah injeksi SQL dalam bahasa Mandarin. Masalah dengan addlashes adalah peretas dapat menggunakan 0xbf27 untuk mengganti tanda kutip tunggal, sedangkan addlashes hanya mengubah 0xbf27 menjadi 0xbf5c27, yang menjadi karakter multi-byte yang valid masih dianggap sebagai tanda kutip tunggal, sehingga addlashes tidak dapat berhasil dicegat.
Tentu saja, addlashes tidak sia-sia. Ini digunakan untuk memproses string byte tunggal. Untuk karakter multi-byte, gunakan mysql_real_escape_string.
Selain itu, untuk contoh get_magic_quotes_gpc di manual PHP:
jika (!get_magic_quotes_gpc()) {
$nama belakang = menambahkan garis miring($_POST['nama belakang']);
} kalau tidak {
$nama belakang = $_POST['nama belakang'];
}
Yang terbaik adalah memeriksa $_POST['lastname'] ketika magic_quotes_gpc sudah terbuka.
Mari kita bahas perbedaan antara dua fungsi mysql_real_escape_string dan mysql_escape_string:
mysql_real_escape_string hanya dapat digunakan ketika (PHP 4 >= 4.3.0, PHP 5). Jika tidak, Anda hanya dapat menggunakan mysql_escape_string. Perbedaan keduanya adalah:
mysql_real_escape_string memperhitungkan rangkaian karakter koneksi saat ini, sedangkan mysql_escape_string tidak.
Untuk meringkas:
addlashes() adalah tambahan yang dipaksakan;
mysql_real_escape_string() akan menentukan kumpulan karakter, tetapi ada persyaratan untuk versi PHP
tidak mempertimbangkan kumpulan karakter koneksi saat ini
;