Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

PHP MySQLI Ngăn chặn SQL Injection

Bất kỳ truy vấn nào cũng có thể được đưa vào cho dù đó là đọc hay ghi, liên tục hay tạm thời. Tiêm có thể được thực hiện bằng cách kết thúc một truy vấn và chạy một truy vấn riêng biệt (có thể với mysqli ), làm cho truy vấn dự định không liên quan.

Bất kỳ đầu vào nào cho truy vấn từ một nguồn bên ngoài cho dù đó là từ người dùng hay thậm chí nội bộ đều phải được coi là đối số của truy vấn và là tham số trong ngữ cảnh của truy vấn. Bất kỳ tham số nào trong một truy vấn cần được tham số hóa. Điều này dẫn đến một truy vấn được tham số hóa đúng cách mà bạn có thể tạo một câu lệnh chuẩn bị từ đó và thực thi với các đối số. Ví dụ:

SELECT col1 FROM t1 WHERE col2 = ?

? là một trình giữ chỗ cho một tham số. Sử dụng mysqli , bạn có thể tạo một tuyên bố chuẩn bị bằng cách sử dụng prepare , liên kết một biến (đối số) với một tham số bằng cách sử dụng bind_param và chạy truy vấn với execute . Bạn không cần phải xóa bỏ lập luận nào cả (trên thực tế, làm như vậy là bất lợi). mysqli làm điều đó cho bạn. Quá trình đầy đủ sẽ là:

$stmt = $mysqli->prepare("SELECT col1 FROM t1 WHERE col2 = ?");
$stmt->bind_param("s", $col2_arg);
$stmt->execute();

Cũng có một sự khác biệt quan trọng giữa truy vấn được tham số hóa tuyên bố chuẩn bị . Câu lệnh này, khi được chuẩn bị, không được tham số hóa và do đó dễ bị chèn:

$stmt = $mysqli->prepare("INSERT INTO t1 VALUES ($_POST[user_input])");

Tóm lại:

  • Tất cả Các truy vấn phải được tham số hóa đúng cách (trừ khi chúng không có tham số)
  • Tất cả các đối số cho một truy vấn phải được coi là thù địch nhất có thể, bất kể nguồn của chúng là gì



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ví dụ về TIMESTAMPADD () - MySQL

  2. Chọn 10 bản ghi hàng đầu cho mỗi danh mục trong MySQL

  3. Nhập dữ liệu từ Bảng tính Excel hoặc CVS ​​vào MySQL

  4. Các lệnh sao lưu và khôi phục MySQL để quản trị cơ sở dữ liệu

  5. Quyền truy cập Java JDBC bị từ chối đối với người dùng