Menggunakan masalah pengekodan aksara untuk memintas
suntikan sql mysql_real_escape_string()
Walaupun fungsi boleh mencegah suntikan SQL, ia mungkin dilangkau dalam beberapa kes tertentu.
Pertimbangkan kod PHP berikut: mysql_real_escape_string()
Kod ini kelihatan selamat, tetapi ia boleh digunakan kerana tepi pengekodan set aksara.
<code class="language-php">$login = mysql_real_escape_string(GetFromPost('login')); $password = mysql_real_escape_string(GetFromPost('password')); $sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";</code>
Ketergantungan serangan pada langkah -langkah berikut:
Tetapkan set aksara:Pilih pengekodan (contohnya, GBK).
mysql_real_escape_string()
Prinsip kerja: mysql_real_escape_string()
Walaupun pernyataan pra -pemprosesan simulasi dilumpuhkan, serangan ini dapat memintas pernyataan pra simulasi PDO.
Remedy: mysql_real_escape_string()
SET NAMES
Menggunakan aksara bukan serangan, seperti UTF8MB4 atau UTF8, dapat mengurangkan masalah ini. Mengaktifkan mod SQL NO_BACKSLASH_ESCAPES juga boleh memberikan perlindungan. mysql_set_charset()
Sentiasa gunakan parameter set aksara atau PDO DSN untuk menetapkan set aksara dengan betul. Kenyataan pra -proses sebenar di MySQLI juga kebal terhadap serangan ini.
Kesimpulan:
Walaupun biasanya memberikan perlindungan yang kuat, ia mesti memberi perhatian kepada margin yang berpotensi untuk memastikan suntikan SQL pertahanan yang komprehensif.
Atas ialah kandungan terperinci Bolehkah SQL Injection Bypass `mysql_real_escape_string()` Disebabkan Isu Pengekodan Aksara?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!