Rumah > pangkalan data > tutorial mysql > Bolehkah SQL Injection Bypass `mysql_real_escape_string()` Disebabkan Isu Pengekodan Aksara?

Bolehkah SQL Injection Bypass `mysql_real_escape_string()` Disebabkan Isu Pengekodan Aksara?

Barbara Streisand
Lepaskan: 2025-01-25 21:22:12
asal
424 orang telah melayarinya

Can SQL Injection Bypass `mysql_real_escape_string()` Due to Character Encoding Issues?

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>
Salin selepas log masuk
Kaedah Serangan:

Ketergantungan serangan pada langkah -langkah berikut:

Tetapkan set aksara:

Pilih pengekodan (contohnya, GBK).

    Beban yang berkesan:
  1. Beban yang berkesan dengan dibina dengan teliti, yang mengandungi aksara multi -byte yang tidak sah untuk memastikan bait terakhirnya mewakili backlix ASCII. Panggil
  2. :
  3. Pelanggan percaya bahawa sambungan menggunakan set aksara yang berbeza (contohnya, Latin1), jadi akan memasukkan cerun belakang di hadapan nombor petikan tunggal, seperti juga untuk menghasilkan rentetan kesahihan yang berkesan tatabahasa.
  4. Kirim pertanyaan:
  5. Beban yang sah selepas kebenaran menjadi sebahagian daripada pernyataan SQL, yang membolehkan penyerang memintas perlindungan perlindungan yang diharapkan. mysql_real_escape_string() Prinsip kerja: mysql_real_escape_string()
  6. Masalah utama ialah set aksara jangkaan pelayan tidak sepadan dengan set aksara yang difikirkan oleh klien. Walaupun pengekodan sambungan yang ditetapkan oleh klien digunakan untuk membuat kebenaran, dalam beberapa kes, ia akan merawat aksara multi -garis yang tidak sah sebagai satu byte, termasuk penggunaan dan bukannya .
akibat:

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()

Contoh selamat:

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan