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

mức độ an toàn của các tuyên bố do PDO chuẩn bị

Nói một cách chính xác, thực sự không cần thoát vì giá trị tham số không bao giờ được nội suy vào chuỗi truy vấn.

Cách thức hoạt động của các tham số truy vấn là truy vấn được gửi đến máy chủ cơ sở dữ liệu khi bạn gọi prepare() và các giá trị tham số sẽ được gửi sau, khi bạn gọi execute() . Vì vậy, chúng được giữ riêng biệt với dạng văn bản của truy vấn. Không bao giờ có cơ hội để đưa vào SQL (được cung cấp PDO::ATTR_EMULATE_PREPARES là sai).

Vì vậy, có, các tham số truy vấn giúp bạn tránh được dạng lỗ hổng bảo mật đó.

Chúng có bằng chứng 100% chống lại bất kỳ lỗ hổng bảo mật nào không? Tất nhiên là không rồi. Như bạn có thể biết, một tham số truy vấn chỉ thay thế cho một giá trị chữ duy nhất trong một biểu thức SQL. Bạn không thể thay thế một tham số duy nhất cho danh sách các giá trị, ví dụ:

SELECT * FROM blog WHERE userid IN ( ? );

Bạn không thể sử dụng một tham số để tạo tên bảng hoặc tên cột động:

SELECT * FROM blog ORDER BY ?;

Bạn không thể sử dụng một tham số cho bất kỳ kiểu cú pháp SQL nào khác:

SELECT EXTRACT( ? FROM datetime_column) AS variable_datetime_element FROM blog;

Vì vậy, có khá nhiều trường hợp bạn phải thao tác truy vấn dưới dạng một chuỗi, trước prepare() gọi điện. Trong những trường hợp này, bạn vẫn cần viết mã cẩn thận để tránh bị chèn SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ẩn ID đối tượng cơ sở dữ liệu thực trong url

  2. mysql_num_rows () mong đợi tham số 1 là tài nguyên, boolean được đưa vào

  3. 4 cách để kiểm tra kiểu dữ liệu của cột trong MySQL

  4. Ví dụ về DATE_ADD () - MySQL

  5. Cách nhập / khôi phục bảng MySql bằng PHP