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

PDO là gì, nó liên quan như thế nào với SQL injection và tại sao tôi nên sử dụng cái này?

PDO - Đối tượng dữ liệu PHP là một lớp truy cập cơ sở dữ liệu cung cấp một phương pháp truy cập thống nhất vào nhiều cơ sở dữ liệu.

Nó không tính đến cú pháp dành riêng cho cơ sở dữ liệu, nhưng nó có thể cho phép quá trình chuyển đổi cơ sở dữ liệu và nền tảng khá dễ dàng, chỉ đơn giản bằng cách chuyển đổi chuỗi kết nối trong nhiều trường hợp.

Câu lệnh chuẩn bị sẵn / truy vấn tham số đủ để ngăn chặn việc đưa vào lệnh đầu tiên trên câu lệnh đó. Nếu bạn sử dụng SQL động chưa được kiểm tra ở bất kỳ nơi nào khác trong ứng dụng của mình, bạn vẫn dễ bị chèn vào bậc hai.

Chèn bậc hai có nghĩa là dữ liệu đã được tuần hoàn qua cơ sở dữ liệu một lần trước khi được đưa vào truy vấn và khó rút ra hơn nhiều. AFAIK, bạn hầu như không bao giờ thấy các cuộc tấn công bậc hai thực sự, vì việc thiết kế xã hội theo cách của bạn thường dễ dàng hơn.

PDO chậm hơn một chút so với mysql _ *. Nhưng nó có tính di động tuyệt vời. PDO cung cấp một giao diện duy nhất trên nhiều cơ sở dữ liệu. Điều đó có nghĩa là bạn có thể sử dụng nhiều DB mà không cần sử dụng mysql_query cho mysql, mssql_query cho SQL Server, v.v. Chỉ cần sử dụng một cái gì đó như $db->query("INSERT INTO...") luôn luôn. Bất kể bạn đang sử dụng trình điều khiển cơ sở dữ liệu nào.

Vì vậy, đối với dự án lớn hơn hoặc di động thì nên sử dụng PDO. Ngay cả Zend Framework sử dụng PDO.

Chèn SQL

SQL Injection

Chèn SQL là một kỹ thuật mà người dùng độc hại có thể đưa các lệnh SQL vào một câu lệnh SQL, thông qua đầu vào trang web.

Các lệnh SQL được chèn vào có thể thay đổi câu lệnh SQL và ảnh hưởng đến bảo mật của ứng dụng web.

Các câu lệnh được chuẩn bị sẵn trong PDO có đủ để ngăn chặn việc đưa vào SQL không?

Câu trả lời ngắn gọn là KHÔNG, PDO chuẩn bị sẽ không bảo vệ bạn khỏi tất cả các cuộc tấn công SQL-Injection. Các cuộc tấn công ví dụ

Cách sử dụng PDO?

Ví dụ:

$stmt = $dbh->prepare("SELECT * FROM tables WHERE names = :name");
$stmt->execute(array(':name' => $name));

Tài liệu tham khảo



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. lỗi mysqldump:Có gói lớn hơn max_allowed_packet '

  2. Cách sử dụng Coalesce trong MySQL

  3. Cách hạn chế quyền truy cập cổng MySQL

  4. Cảnh báo:mysqli_stmt ::bind_param ():Số biến không khớp với số tham số trong câu lệnh đã chuẩn bị

  5. ColdFusion tham số hóa một truy vấn