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

Bagaimanakah Pertanyaan Berparameter Melindungi Terhadap Suntikan SQL?

Mary-Kate Olsen
Lepaskan: 2024-10-29 10:54:02
asal
572 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk
  • 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!

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