Melindungi pangkalan data anda: Penyataan yang disediakan dan pencegahan suntikan SQL
Suntikan SQL kekal sebagai kelemahan keselamatan kritikal, yang membolehkan penyerang menyuntik kod SQL yang berbahaya ke dalam input pangkalan data. Prinsip utama pertahanan adalah untuk memisahkan data dari perintah SQL yang boleh dilaksanakan. Ini memastikan data dianggap sebagai data, bukan sebagai arahan yang berpotensi berbahaya.Kenyataan yang disediakan: Pertahanan Terbaik
Pendekatan yang paling mantap untuk menggagalkan suntikan SQL menggunakan kenyataan yang disediakan. Ini adalah pertanyaan SQL yang disusun sebelum ini di mana parameter ditangani secara berasingan, menghalang suntikan kod berniat jahat. Sambungan PHP yang popular untuk melaksanakan kenyataan yang disediakan termasuk PDO dan MySQLI.
Menggunakan pernyataan yang disediakan dengan PDO dan mysqli
pdo:
pdo menawarkan pendekatan yang bersih dan konsisten:mysqli (Php 8.1 dan ke bawah):
<code class="language-php">$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name'); $stmt->execute(['name' => $name]);</code>
mysqli (Php 8.2 dan ke atas):
<code class="language-php">$stmt = $db->prepare('SELECT * FROM employees WHERE name = ?'); $stmt->bind_param('s', $name); // 's' denotes a string parameter $stmt->execute();</code>
Konfigurasi Sambungan Pangkalan Data Penting
<code class="language-php">$result = $db->execute_query('SELECT * FROM employees WHERE name = ?', [$name]);</code>
persediaan sambungan pangkalan data yang betul adalah penting untuk pernyataan yang disediakan berfungsi dengan berkesan.
pdo:
Lumpuhkan pernyataan yang disediakan untuk keselamatan optimum:mysqli:
<code class="language-php">$dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8mb4', 'user', 'password'); $dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);</code>
Kelebihan pernyataan yang disediakan
<code class="language-php">mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // Enable detailed error reporting $dbConnection = new mysqli('127.0.0.1', 'username', 'password', 'test'); $dbConnection->set_charset('utf8mb4'); // Set character set</code>
Kenyataan yang disediakan memberikan banyak faedah:
Perlindungan suntikan SQL yang tidak suntikan:
Atas ialah kandungan terperinci Bagaimanakah penyataan yang disediakan menghalang suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!