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

SQL-injection hoạt động như thế nào và làm cách nào để chống lại nó

SQL injection là một truy vấn SQL được hình thành độc hại được sử dụng để "nhầm lẫn" một cơ sở dữ liệu SQL đưa ra thứ mà nó không nên. Ví dụ:hãy xem xét truy vấn sau

"SELECT * FROM `users` WHERE `username` = '$name'";

Trong trường hợp bình thường, điều này sẽ hoạt động. Nếu chúng tôi gửi 'Jack' cho mục này, nó sẽ trả về tất cả người dùng có tên Jack. Tuy nhiên, nếu người dùng nhập, nói "'OR 1 =1", truy vấn kết quả sẽ là

"SELECT * FROM `users` WHERE `username` = '' OR 1=1";

Vì 1 luôn bằng 1 và mệnh đề kết hợp là HOẶC, điều này sẽ trả về true trên mọi hàng, lần lượt sẽ hiển thị MỌI hàng cho người dùng độc hại. Sử dụng kỹ thuật này, ai đó có thể xem toàn bộ cơ sở dữ liệu của bạn. Ngoài ra, hãy cân nhắc nếu ai đó gửi nội dung nào đó như "'; DROP TABLE users "; -, kết quả là

"SELECT * FROM `users` WHERE `username` = ''; DROP TABLE `users`";--";

Đó là hai truy vấn, một truy vấn sẽ không làm gì cả, truy vấn thứ hai sẽ xóa TOÀN BỘ cơ sở dữ liệu người dùng, dẫn đến mất dữ liệu của bạn.

Phương pháp tốt nhất để ngăn chặn việc tiêm SQL là sử dụng các câu lệnh đã chuẩn bị sẵn. Với những điều này, bạn gửi một truy vấn đến cơ sở dữ liệu SQL có nội dung như

"SELECT * FROM `users` WHERE `username` = '?'";

Điều này cho phép cơ sở dữ liệu biết định dạng của truy vấn (WHERE tên người dùng bằng một số giá trị), vì vậy không có sự nhầm lẫn khi đưa ra một truy vấn văn bản thuần túy. Sau đó, cơ sở dữ liệu biết mong đợi một giá trị và đặt nó ở đâu. Sau đó, bạn chuyển giá trị đó vào cơ sở dữ liệu mà nó có thể sử dụng để tìm kiếm. Điều này cũng tốt hơn vì cơ sở dữ liệu có thể tối ưu hóa truy vấn để tìm kiếm nhanh hơn.

Đọc các báo cáo đã chuẩn bị sẵn, sẽ giải thích điều này chi tiết hơn.



  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ấn đề khóa ngoại trong jdbc

  2. Hiểu làn sóng nhiệt mới của MySQL

  3. Có thể có đối chiếu utf8 phân biệt trọng âm và không phân biệt chữ hoa chữ thường trong mysql không?

  4. EF Core `update-database` trên MySql không thành công với` __EFMigrationsHistory 'không tồn tại`

  5. Sử dụng Python và MySQL trong Quy trình ETL