Rumah >pangkalan data >tutorial mysql >Bagaimanakah Pertanyaan Berparameter Melindungi Terhadap Suntikan SQL?

Bagaimanakah Pertanyaan Berparameter Melindungi Terhadap Suntikan SQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-29 10:54:02607semak imbas

How Do Parameterized Queries Protect Against SQL Injection?

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>
  • mysqli_prepare(): Sediakan pernyataan pertanyaan berparameter.
  • mysqli_stmt_bind_param(): Mengikat nilai input kepada pemegang tempat (?).
  • mysqli_stmt_execute(): Melaksanakan pertanyaan yang disediakan.
  • mysqli_stmt_fetch(): baris hasil.

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:

  • Cincang atau enkripsi kata laluan sebelum menyimpannya dalam pangkalan data.
  • Sahkan input pengguna untuk mengelakkan aksara berniat jahat.
  • Gunakan pernyataan yang disediakan secara konsisten untuk semua interaksi pangkalan data yang melibatkan data yang disediakan pengguna.

Atas ialah kandungan terperinci Bagaimanakah Pertanyaan Berparameter Melindungi Terhadap Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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