Rumah > pembangunan bahagian belakang > tutorial php > Bolehkah SQL Injection Bypass `mysql_real_escape_string()` Menggunakan Manipulasi Set Aksara?

Bolehkah SQL Injection Bypass `mysql_real_escape_string()` Menggunakan Manipulasi Set Aksara?

Patricia Arquette
Lepaskan: 2024-12-25 00:00:19
asal
226 orang telah melayarinya

Can SQL Injection Bypass `mysql_real_escape_string()` Using Character Set Manipulation?

Suntikan SQL Yang Mengelakkan mysql_real_escape_string()

Walaupun penggunaannya meluas, mysql_real_escape_string() tidak kebal daripada serangan suntikan SQL.

Serangan

Keperluan: Sambungan pangkalan data mesti menggunakan set aksara yang terdedah seperti big5, cp932, gb2312, gbk atau sjis.

Langkah:

  1. Tetapkan pengekodan: Tetapkan pengekodan pelayan kepada set aksara yang terdedah menggunakan SET NAMES.
  2. Bina muatan: Buat muatan yang termasuk aksara multibait yang tidak sah, cth., 0xbf27, dalam set watak yang terdedah.
  3. Escape menggunakan mysql_real_escape_string(): Melarikan diri daripada muatan menggunakan mysql_real_escape_string(), yang akan memasukkan garisan ke belakang sebelum bait awal iaitu 0x27.
  4. Soal siasat pangkalan data: Gunakan muatan yang dilepaskan pertanyaan.

Keputusan: Disebabkan oleh ketidakpadanan pengekodan pelayan pelanggan, pertanyaan itu mengandungi petikan tunggal yang tidak dapat dielakkan, menghasilkan suntikan SQL yang berjaya.

The Hodoh

Pepijat masuk mysql_real_escape_string(): Dalam versi MySQL yang terdahulu, aksara multibait yang tidak sah dianggap sebagai bait tunggal untuk tujuan melarikan diri, walaupun pelanggan mengetahui pengekodan sambungan.

Kerentanan PDO: Kenyataan yang disediakan yang ditiru dalam PDO dibina menggunakan mysql_real_escape_string() dan oleh itu terdedah kepada serangan ini.

The Saving Grace

Amalan selamat:

  • Gunakan set watak yang tidak terdedah seperti utf8 atau latin1 .
  • Tetapkan set aksara dengan betul pada kedua-dua pelanggan dan pelayan.
  • Lumpuhkan kenyataan yang disediakan yang dicontohi dalam PDO.

Atas ialah kandungan terperinci Bolehkah SQL Injection Bypass `mysql_real_escape_string()` Menggunakan Manipulasi Set Aksara?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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