Menggunakan Pertanyaan Berparameter untuk Interaksi Pangkalan Data Selamat
Suntikan SQL kekal sebagai ancaman keselamatan yang ketara, membenarkan penyerang melaksanakan pertanyaan berniat jahat menggunakan input yang diserahkan pengguna . Untuk melindungi tapak web anda, pertanyaan berparameter menawarkan penyelesaian yang mantap. Walau bagaimanapun, menyepadukannya memerlukan pengendalian sambungan pangkalan data yang betul.
Pertimbangkan contoh kod halaman log masuk ini:
<code class="php">$userName = $_POST["username"]; $userPass = $_POST["password"]; $query = "SELECT * FROM users WHERE username = '$userName' AND password = '$userPass'"; $result = mysqli_query($dbc, $query); //$dbc is for MySQL connection: $dbc = @mysqli_connect($dbhost, $dbuser, $dbpass, $db) $row = mysqli_fetch_array($result); if(!$row){ echo "No existing user or wrong password."; }</code>
Melaksanakan Pertanyaan Berparameter:
Untuk mengelakkan Suntikan SQL, gantikan kod ini dengan:
<code class="php">$stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE username = ? AND password = ?"); mysqli_stmt_bind_param($stmt, "ss", $userName, $userPass); mysqli_stmt_execute($stmt); $row = mysqli_stmt_fetch($stmt);</code>
Pengendalian Sambungan:
Dalam kod asal, sambungan ke pangkalan data diwujudkan menggunakan mysqli_connect(). Ini perlu dilakukan sebelum melaksanakan sebarang pertanyaan. Pastikan anda mempunyai $dbc yang sah sebelum meneruskan.
Amalan Terbaik Keselamatan:
Atas ialah kandungan terperinci Bagaimanakah Pertanyaan Berparameter Melindungi Terhadap Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!