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>
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!