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:
Tetapkan set aksara pelayan kepada pengekodan yang terdedah:
<code class="language-sql">mysql_query('SET NAMES gbk');</code>
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>
Laksanakan pertanyaan dengan muatan serangan yang tidak dapat dilepaskan:
<code class="language-sql">mysql_query("SELECT * FROM test WHERE name = '$var' LIMIT 1");</code>
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:
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!