SQL Injection Exploits melalui addslashes() dalam PHP
Fungsi addslashes() PHP diketahui kurang selamat berbanding mysql_real_escape apabila ia melibatkan menghalang kelemahan suntikan SQL. Walaupun addslashes() sering dikritik kerana hadnya, adalah penting untuk memahami cara ia boleh membawa kepada serangan yang berjaya.
Senario Contoh
Pertimbangkan kod berikut yang cuba untuk membersihkan input pengguna:
$input = addslashes($_GET['input']); $query = "SELECT * FROM users WHERE username='$input'";
Isu dengan kod ini ialah addslashes() tidak mengendalikan aksara multibait dengan betul. Jika penyerang memberikan nama pengguna yang mengandungi aksara berbilang bait yang berakhir dengan aksara sengkang ke belakang (), addslashes() akan memasukkan sengkang ke belakang ke tengah-tengah jujukan, memecahkan kesahihannya. Ini boleh menyebabkan garis miring ke belakang ditafsirkan sebagai watak melarikan diri dalam pertanyaan SQL dan bukannya melarikan petikan tunggal berikut.
Contoh input berniat jahat yang boleh mengeksploitasi kerentanan ini ialah:
%E4%B8%80' OR 1=1 --
addslashes() akan menukar ini kepada:
%E4%B8%80\' OR 1=1 --
Escaped backslash () kini menjadi bahagian yang sah dalam jujukan berbilangbait, membenarkan penyerang melaksanakan arahan SQL sewenang-wenangnya (dalam kes ini, untuk memintas pengesahan).
Kaveat Am
Kerentanan timbul kerana addslashes() boleh ditipu untuk mencipta aksara berbilang bait yang sah dan bukannya melarikan diri dari single berikut watak petik. Ini berlaku apabila pengekodan aksara yang digunakan termasuk aksara berbilang bait yang sah yang berakhir dengan 0x5c (kod heksadesimal untuk aksara garisan belakang). Walaupun UTF-8 tidak memenuhi syarat ini, pengekodan lain, seperti Latin1, melakukannya. Oleh itu, adalah penting untuk mengetahui potensi kelemahan ini apabila menggunakan addslashes() untuk pembersihan input dan pertimbangkan untuk menggunakan alternatif yang lebih mantap seperti mysql_real_escape.
Atas ialah kandungan terperinci Bolehkah addslashes() dalam PHP Masih Membawa kepada Kerentanan Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!