Rumah > pangkalan data > tutorial mysql > Bagaimanakah SQL Injection Boleh Memintas `mysql_real_escape_string()`?

Bagaimanakah SQL Injection Boleh Memintas `mysql_real_escape_string()`?

Susan Sarandon
Lepaskan: 2025-01-25 21:27:10
asal
641 orang telah melayarinya

How Can SQL Injection Bypass `mysql_real_escape_string()`?

Menggunakan aksara berbilang bait yang tidak sah untuk memintas fungsi mysql_real_escape_string() untuk suntikan SQL

Walaupun fungsi mysql_real_escape_string() digunakan, suntikan SQL mungkin masih berlaku. Langkah berikut menunjukkan cara memintas fungsi ini:

  1. Tetapkan set aksara pelayan kepada pengekodan yang terdedah:

    <code class="language-sql">mysql_query('SET NAMES gbk');</code>
    Salin selepas log masuk
  2. Bina muatan serangan yang mengandungi aksara berbilang bait yang tidak sah:

    <code class="language-php">$var = mysql_real_escape_string("\xbf\x27 OR 1=1 /*");</code>
    Salin selepas log masuk
  3. Laksanakan pertanyaan dengan muatan serangan yang tidak dapat dilepaskan:

    <code class="language-sql">mysql_query("SELECT * FROM test WHERE name = '$var' LIMIT 1");</code>
    Salin selepas log masuk
Operasi melarikan diri bagi fungsi

mysql_real_escape_string() bergantung pada set aksara yang sedang digunakan. Walau bagaimanapun, dalam contoh ini, sambungan menggunakan set aksara yang terdedah (cth. gbk), membenarkan penciptaan aksara multibait yang tidak sah. Oleh itu, muatan suntikan tidak terlepas dengan betul, mengakibatkan serangan suntikan berjaya.

Langkah Keselamatan

Untuk mengelakkan serangan suntikan jenis ini, pastikan anda mengambil langkah berikut:

  • Gunakan set aksara yang selamat: Pilih set aksara yang tidak terdedah, seperti utf8 atau latin1.
  • Dayakan mod SQL NO_BACKSLASH_ESCAPES: Ini akan menghalang aksara tidak sah daripada dicipta semasa melarikan diri.
  • Gunakan PDO dan lumpuhkan kenyataan simulasi yang disediakan: PDO menyediakan kenyataan yang disediakan sebenar, menghalang potensi kelemahan suntikan.
  • Gunakan versi MySQL yang lebih baharu (5.1 atau lebih tinggi): Versi ini membetulkan kerentanan yang membenarkan serangan suntikan yang diterangkan di atas.

Atas ialah kandungan terperinci Bagaimanakah SQL Injection Boleh Memintas `mysql_real_escape_string()`?. 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