Rumah > pembangunan bahagian belakang > tutorial php > Bolehkah addslashes() dalam PHP Masih Membawa kepada Kerentanan Suntikan SQL?

Bolehkah addslashes() dalam PHP Masih Membawa kepada Kerentanan Suntikan SQL?

Linda Hamilton
Lepaskan: 2024-12-02 15:46:12
asal
847 orang telah melayarinya

Can addslashes() in PHP Still Lead to SQL Injection Vulnerabilities?

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'";
Salin selepas log masuk

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 --
Salin selepas log masuk

addslashes() akan menukar ini kepada:

%E4%B8%80\' OR 1=1 --
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan