Memahami SQL Injections melalui addslashes()
Dalam PHP, addslashes() selalunya dibandingkan dengan mysql_real_escape_string sebagai langkah keselamatan terhadap suntikan SQL. Walaupun kedua-duanya boleh membantu dalam melindungi data, contoh menunjukkan bahawa addslashes() mungkin membenarkan eksploitasi.
Salah satu kaedah serangan boleh berlaku adalah dengan memanipulasi addslashes() untuk memasukkan backslash ke dalam aksara multibait. Akibatnya, peranan pelindung garis serong ke belakang dinetralkan dan pertanyaan berniat jahat boleh dibina.
Sebagai contoh, pertimbangkan pertanyaan berikut menggunakan tanda sembang():
$query = "SELECT * FROM users WHERE name = '" . addslashes($_GET['name']) . "'";
Seorang penyerang boleh lulus yang berikut sebagai parameter "nama":
'John Doe' OR 1 = 1 --
Biasanya, petikan tunggal akan dilepaskan oleh addslash(). Walau bagaimanapun, dalam kes ini, penyerang bergantung pada aksara berbilang bait "Ö". Apabila "Ö" dikodkan dalam UTF-8, ia terdiri daripada tiga bait: 0xC3, 0xB6 dan 0x9C.
Addslashes() mentafsirkan input penyerang sebagai:
'John Doe' ÖR 1 \= 1 --
Dengan garis miring terbalik diletakkan dalam aksara multibait, addslashes() menganggapnya sebagai kesinambungan aksara bukannya simbol melarikan diri. Akibatnya, pertanyaan SQL tidak dilepaskan dengan betul, membolehkan penyerang memintas langkah keselamatan.
Adalah penting untuk ambil perhatian bahawa jenis serangan ini hanya terpakai pada pengekodan aksara yang wujudnya aksara berbilangbait yang berakhir dengan 0x5c (karakter garis miring ke belakang ). UTF-8, bagaimanapun, tidak mematuhi ini, mengurangkan kerentanannya kepada vektor serangan khusus ini.
Atas ialah kandungan terperinci Adakah addslashes() Pertahanan yang Boleh Dipercayai Terhadap Serangan Suntikan SQL dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!