Kerentanan Suntikan SQL melalui addslashes()
Dalam PHP, fungsi addslashes() digunakan untuk melepaskan aksara khas dalam rentetan. Walau bagaimanapun, fungsi ini telah diketahui terdedah kepada serangan suntikan SQL.
Contoh 1
Pertimbangkan pernyataan SQL berikut:
SELECT * FROM users WHERE username = '$username'
Jika pembolehubah $username mengandungi satu aksara petikan ('), penyerang boleh mengeksploitasi kelemahan ini dengan menghantar nilai seperti sebagai:
admin' OR 1=1
Ini akan menghasilkan pernyataan SQL berikut:
SELECT * FROM users WHERE username = 'admin'' OR 1=1'
Fungsi addslashes() akan melarikan diri daripada aksara petikan tunggal, tetapi ia tidak akan terlepas daripada aksara ruang. Akibatnya, pernyataan SQL akan dilaksanakan seperti yang dimaksudkan dan penyerang akan dapat mendapatkan akses kepada akaun pentadbir.
Contoh 2
Contoh lain kerentanan suntikan SQL melalui addslashes() melibatkan penggunaan aksara multibait yang berakhir dengan 0x5c (backslash). Ini boleh menipu fungsi addslashes() untuk mencipta aksara berbilang bait yang sah dan bukannya melarikan petikan tunggal yang berikut.
SELECT * FROM users WHERE username = '$username'
Jika pembolehubah $username mengandungi aksara berbilang bait berikut:
"\x5c'"
Fungsi addslashes() akan melarikan diri daripada aksara backslash, tetapi ia tidak akan melarikan diri daripada aksara petikan tunggal. Ini akan menghasilkan pernyataan SQL berikut:
SELECT * FROM users WHERE username = "\x5c'\x27"
Pernyataan SQL akan dilaksanakan seperti yang dimaksudkan dan penyerang akan dapat memperoleh akses kepada pangkalan data.
Kesimpulan
Fungsi addslashes() tidak boleh digunakan untuk menghalang serangan suntikan SQL. Sebaliknya, pembangun harus menggunakan fungsi yang lebih selamat seperti mysql_real_escape atau PDO::quote.
Atas ialah kandungan terperinci Adakah `addslashes()` dalam PHP Mencukupi untuk Mencegah Serangan Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!