Adakah mysql_real_escape_string() dan mysql_escape_string() aplication keselamatan?
Walaupun kelaziman fungsi ini untuk membersihkan input pengguna, kebimbangan berterusan mengenai batasannya dalam melindungi daripada serangan SQL dan kemungkinan eksploitasi.
SQL Suntikan Kekal Ancaman :
mysql_real_escape_string() ialah terutamanya bertujuan untuk menghalang suntikan SQL standard. Walau bagaimanapun, ia memberikan perlindungan terhad terhadap teknik suntikan lanjutan.
Pertimbangkan kod ini:
$sql = "SELECT * FROM users WHERE username = '" . mysql_real_escape_string($username) . "'";
Penyerang masih boleh melaksanakan suntikan dengan mengeksploitasi nama jadual atau lajur, seperti dalam:
$username = "'); DROP TABLE users; --";
SUKA SQL Attacks:
SUKA SQL suntikan juga terdedah dengan fungsi ini. Contohnya, penyerang boleh:
$data = '%'; $sql = "SELECT * FROM users WHERE username LIKE '" . mysql_real_escape_string($data) . "%'"; # Can retrieve all results
Eksploitasi Set Aksara Unikod:
Eksploitasi Charset boleh memberikan penyerang kawalan yang meluas, walaupun konfigurasi HTML betul.
LIMIT Eksploitasi Medan:
Melepaskan diri dari Medan LIMIT juga boleh membenarkan penyerang untuk mendapatkan semula data yang tidak dibenarkan:
$sql = "SELECT * FROM users LIMIT '" . mysql_real_escape_string($limit) . "'"; # Can retrieve all results
Pernyataan Disediakan sebagai Alternatif Teguh:
Penyelesaian yang ideal untuk keselamatan pangkalan data ialah penggunaan disediakan kenyataan. Penyata yang disediakan melaksanakan pertanyaan SQL pada bahagian pelayan, menghalang SQL yang tidak dijangka daripada dilaksanakan. Pertimbangkan contoh ini:
$statement = $pdo->prepare("SELECT * FROM users WHERE username = ?"); $statement->execute(array($username));
Dengan menggunakan pernyataan yang disediakan, anda memanfaatkan mekanisme perlindungan pelayan SQL dan dilindungi daripada eksploitasi yang diketahui dan tidak diketahui.
Atas ialah kandungan terperinci Adakah `mysql_real_escape_string()` dan `mysql_escape_string()` Mencukupi untuk Mencegah Serangan Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!