Rumah >pembangunan bahagian belakang >tutorial php >Petua pengaturcaraan PHP untuk mengelakkan serangan suntikan SQL

Petua pengaturcaraan PHP untuk mengelakkan serangan suntikan SQL

WBOY
WBOYasal
2023-07-09 21:18:121279semak imbas

Petua Pengaturcaraan PHP untuk Mencegah Serangan SQL Injection

Pengenalan:
SQL injection ialah kaedah serangan aplikasi web yang biasa dilakukan oleh penyerang dengan memasukkan kod SQL berbahaya ke dalam data yang dimasukkan oleh pengguna . Untuk melindungi aplikasi kami daripada serangan suntikan SQL, kami perlu menggunakan beberapa teknik pengaturcaraan untuk menapis, melarikan diri dan mengesahkan data yang dimasukkan pengguna. Artikel ini akan membincangkan beberapa teknik pengaturcaraan PHP biasa untuk membantu kami mencegah serangan suntikan SQL.

  1. Gunakan pernyataan yang disediakan
    Pernyataan yang disediakan ialah alat yang berkuasa dalam PHP untuk menghalang suntikan SQL. Ia memastikan bahawa data yang dimasukkan dikeluarkan dengan betul dan dianggap sebagai data dan bukan sebahagian daripada kod SQL. Berikut ialah contoh penggunaan pernyataan yang disediakan:
$mysqli = new mysqli("localhost", "username", "password", "database");

if($mysqli->connect_error) {
    die("连接数据库失败: " . $mysqli->connect_error);
}

$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);

$username = $_POST['username'];
$password = $_POST['password'];

$stmt->execute();
$result = $stmt->get_result();

while($row = $result->fetch_assoc()) {
    // 处理结果集
}

$stmt->close();
  1. Menggunakan pertanyaan berparameter
    Serupa dengan pernyataan yang disediakan, pertanyaan berparameter juga boleh menghalang serangan suntikan SQL. Kita boleh menggunakan perpustakaan PDO untuk melaksanakan pertanyaan berparameter. Berikut ialah contoh menggunakan pertanyaan berparameter:
$dsn = 'mysql:host=localhost;dbname=database';
$username = 'username';
$password = 'password';

try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die("连接数据库失败:" . $e->getMessage());
}

$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);

$username = $_POST['username'];
$password = $_POST['password'];

$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach($result as $row) {
    // 处理结果集
}

$stmt->closeCursor();
  1. Pengesahan dan Penapisan Input
    Selain menggunakan pernyataan yang disediakan dan pertanyaan berparameter, kami juga harus melakukan pengesahan dan penapisan input pengguna. Ini membantu kami mengesan dan menyekat input berniat jahat. Berikut ialah contoh mengesahkan dan menapis input pengguna:
$username = $_POST['username'];
$password = $_POST['password'];

if(!empty($username) && !empty($password)) {
    // 验证用户名和密码是否符合要求,如长度、字符等
    // ...
    
    // 过滤特殊字符
    $username = filter_var($username, FILTER_SANITIZE_STRING);
    $password = filter_var($password, FILTER_SANITIZE_STRING);
    
    // 执行SQL查询
    // ...
} else {
    die("用户名和密码不能为空");
}

Ringkasan:
Untuk mengelakkan serangan suntikan SQL, kita mesti mengambil langkah untuk menapis, melarikan diri dan mengesahkan data yang dimasukkan pengguna. Menggunakan pernyataan yang disediakan dan pertanyaan berparameter boleh menghalang serangan suntikan SQL dengan berkesan. Pada masa yang sama, pengesahan dan penapisan input juga merupakan langkah pertahanan yang penting. Dengan menggunakan petua pengaturcaraan PHP ini, kami boleh meningkatkan keselamatan aplikasi kami dan melindungi maklumat pengguna dan keselamatan pangkalan data.

Atas ialah kandungan terperinci Petua pengaturcaraan PHP untuk mengelakkan serangan 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