Rumah > pembangunan bahagian belakang > tutorial php > Adakah `addslashes()` dalam PHP Mencukupi untuk Mencegah Serangan Suntikan SQL?

Adakah `addslashes()` dalam PHP Mencukupi untuk Mencegah Serangan Suntikan SQL?

Linda Hamilton
Lepaskan: 2024-12-01 12:12:13
asal
183 orang telah melayarinya

Is `addslashes()` in PHP Sufficient to Prevent SQL Injection Attacks?

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

Jika pembolehubah $username mengandungi satu aksara petikan ('), penyerang boleh mengeksploitasi kelemahan ini dengan menghantar nilai seperti sebagai:

admin' OR 1=1
Salin selepas log masuk

Ini akan menghasilkan pernyataan SQL berikut:

SELECT * FROM users WHERE username = 'admin'' OR 1=1'
Salin selepas log masuk

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

Jika pembolehubah $username mengandungi aksara berbilang bait berikut:

"\x5c'"
Salin selepas log masuk

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

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!

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