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
Patricia Arquetteasal
2024-12-25 00:00:19145semak imbas

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:
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