Rumah > pangkalan data > tutorial mysql > Bagaimanakah Pertanyaan Berparameter dalam PHP dengan MySQL boleh melindungi daripada Serangan Suntikan SQL?

Bagaimanakah Pertanyaan Berparameter dalam PHP dengan MySQL boleh melindungi daripada Serangan Suntikan SQL?

Linda Hamilton
Lepaskan: 2024-10-28 19:03:02
asal
652 orang telah melayarinya

How can Parameterized Queries in PHP with MySQL protect against SQL Injection Attacks?

Pertanyaan Berparameter untuk Sambungan PHP-MySQL Selamat

Suntikan SQL mewakili ancaman keselamatan yang teruk kepada aplikasi web. Dengan memanipulasi pertanyaan SQL, penyerang boleh mendapatkan akses tanpa kebenaran kepada data sensitif atau mengganggu operasi pangkalan data. Pertanyaan berparameter menyediakan langkah balas yang berkesan untuk mengurangkan kerentanan ini.

Berikut ialah coretan kod daripada halaman log masuk yang menggambarkan cara menyediakan pertanyaan berparameter dalam PHP dengan MySQL:

<code class="php">$dbc = @mysqli_connect($dbhost, $dbuser, $dbpass, $db); // MySQL connection

$userName = $_POST["username"];
$userPass = $_POST["password"];

$stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE username = ? AND password = ?");
mysqli_stmt_bind_param($stmt, "s", $userName);
mysqli_stmt_bind_param($stmt, "s", $userPass);
mysqli_stmt_execute($stmt);
$row = mysqli_stmt_fetch($stmt);

if (!$row) {
    echo "No existing user or wrong password.";
}</code>
Salin selepas log masuk

Kod ini mewujudkan sambungan ke pangkalan data MySQL menggunakan mysqli_connect dan memberikan pengecam sambungan kepada $dbc. Pembolehubah $userName dan $userPass menerima nama pengguna dan kata laluan yang dimasukkan oleh pengguna pada halaman log masuk.

Fungsi mysqli_prepare memulakan pernyataan yang disediakan. Pertanyaan SQL yang akan dilaksanakan diluluskan sebagai hujah pertama. Dalam kes ini, ia mendapatkan semula semua baris daripada jadual pengguna di mana kedua-dua nama pengguna dan kata laluan sepadan dengan parameter input.

Seterusnya, mysqli_stmt_bind_param digunakan untuk mengikat parameter input yang disediakan pengguna, $userName dan $userPass, kepada ruang letak (?) dalam pernyataan yang disediakan. Kod menentukan bahawa kedua-dua parameter adalah jenis data s (rentetan).

Fungsi mysqli_stmt_execute melaksanakan pernyataan yang disediakan.

Akhir sekali, mysqli_stmt_fetch mendapatkan semula baris pertama daripada set hasil dan menetapkannya kepada pembolehubah $row.

Dengan menggunakan pertanyaan berparameter, kod ini memastikan pernyataan SQL yang berniat jahat tidak dapat dilaksanakan, dengan itu melindungi daripada serangan suntikan SQL.

Untuk keselamatan tambahan, sangat disyorkan untuk menyulitkan atau cincang kata laluan pengguna sebelum menyimpannya dalam pangkalan data.

Atas ialah kandungan terperinci Bagaimanakah Pertanyaan Berparameter dalam PHP dengan MySQL boleh melindungi daripada 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