Rumah > pangkalan data > tutorial mysql > Adakah `mysqli_real_escape_string` Cukup untuk Mencegah Suntikan SQL?

Adakah `mysqli_real_escape_string` Cukup untuk Mencegah Suntikan SQL?

Susan Sarandon
Lepaskan: 2024-12-16 13:15:19
asal
485 orang telah melayarinya

Is `mysqli_real_escape_string` Enough to Prevent SQL Injection?

Adakah mysqli_real_escape_string Mencukupi untuk Mengurangkan Suntikan dan Serangan SQL?

Walaupun penggunaannya meluas, mysqli_real_escape_string bukanlah pertahanan yang tidak dapat ditembusi oleh SQL injection. Seperti yang digambarkan dalam contoh yang disediakan:

$email = mysqli_real_escape_string($db_con, $_POST['email']);
$psw = mysqli_real_escape_string($db_con, $_POST['psw']);

$query = "INSERT INTO `users` (`email`, `psw`) VALUES ('$email', '$psw')";
Salin selepas log masuk

Kod ini cuba melindungi daripada input berniat jahat dengan melepaskan petikan tunggal menggunakan mysqli_real_escape_string. Walau bagaimanapun, pendekatan ini kekal terdedah kepada suntikan SQL, seperti yang ditunjukkan oleh serangan ini:

myEmail = 'user@example.com' OR 0 = 1
Salin selepas log masuk

Dalam keadaan ini, suntikan mengeksploitasi fakta bahawa mysqli_real_escape_string hanya melepaskan petikan tunggal. Dengan menyuntik rentetan myEmail = 'user@example.com' ATAU 0 = 1 ke dalam medan e-mel, penyerang boleh memintas pengesahan dan mendapat akses tanpa kebenaran.

Untuk mencegah suntikan SQL dengan berkesan, pertimbangkan untuk menggunakan pernyataan yang disediakan atau berparameter pertanyaan. Mekanisme ini memisahkan data daripada arahan dengan teliti, menghapuskan kemungkinan pencemaran input.

Pernyataan yang disediakan melaksanakan pertanyaan dengan parameter yang dibekalkan pengguna. Nilai ini dimasukkan dengan selamat ke dalam pertanyaan tanpa mengubah strukturnya. Contohnya:

$stmt = $mysqli->prepare("INSERT INTO `users` (`email`, `psw`) VALUES (?, ?)");
$stmt->bind_param("ss", $email, $psw);
Salin selepas log masuk

Dalam situasi di mana kenyataan yang disediakan tidak boleh dilaksanakan, laksanakan senarai putih yang ketat untuk menyekat input yang dibenarkan. Ini memastikan bahawa hanya nilai selamat diproses.

Kesimpulannya, walaupun mysqli_real_escape_string menyediakan sedikit perlindungan terhadap suntikan SQL, ia tidak mudah. Kenyataan yang disediakan atau pertanyaan berparameter bersama-sama dengan penyenaraian putih menawarkan mekanisme pertahanan yang lebih teguh terhadap serangan ini.

Atas ialah kandungan terperinci Adakah `mysqli_real_escape_string` Cukup untuk Mencegah 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