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

Cách tốt nhất để bảo mật truy vấn SQL trong PHP

Truy vấn bạn đã hiển thị trong câu hỏi không sử dụng các giá trị do người dùng cung cấp, vì vậy không có trường hợp SQL Injection nhưng trong trường hợp chung:-

Trước tiên, bạn phải xác thực tất cả đầu vào của người dùng (tên người dùng, email, v.v.) trước khi sử dụng nó trong một truy vấn. Ví dụ:- Nếu bạn chỉ cho phép các ký tự chữ và số trong tên người dùng, thì bạn phải kiểm tra xem đầu vào có thực sự là chữ và số hay không trước khi tiếp tục tạo truy vấn cơ sở dữ liệu và bạn cũng phải kiểm tra kích thước của tất cả các đầu vào.

Sau đó, theo ý kiến ​​của tôi Câu lệnh chuẩn bị là lựa chọn tốt nhất để ngăn chặn việc đưa vào SQL.

Sự cố với mysql_real_escape_string ():-

Vì mysql_real_escape_string () thoát các ký tự theo bộ ký tự mặc định, vì vậy nó tốt hơn so với hàm Addlashes () và nó làm sạch đúng cách Việc đưa vào SQL phát sinh do lạm dụng bộ ký tự nhiều byte , nhưng trong một bài viết khác, đây , một tình huống giải quyết được hiển thị giải thích rằng việc tiêm vẫn có thể được thực hiện.

Giải pháp:-

Vì vậy, cách thích hợp và tốt hơn để ngăn chặn SQL injection là sử dụng các câu lệnh đã chuẩn bị sẵn. Đây là một kỹ thuật trong đó các câu lệnh SQL được biên dịch trước trước khi chèn đầu vào của người dùng (tham số) và được coi như các mẫu SQL có thể sử dụng lại. Vì vậy, nó phân tách đầu vào của người dùng với Mã SQL thực tế và trình phân tích cú pháp SQL không bao giờ phân tích cú pháp đầu vào của người dùng.

Ngoài bảo mật, nó còn tối ưu hóa tốc độ truy vấn SQL. Nó hữu ích trong những trường hợp bạn cần chạy cùng một truy vấn nhiều lần với các đầu vào của người dùng khác nhau.

Bạn có thể tham khảo hướng dẫn sử dụng PHP để biết chi tiết triển khai.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP PDO trả về kết quả không nhất quán cho SELECT FOUND_ROWS ()

  2. JSON_REMOVE () - Xóa dữ liệu khỏi tài liệu JSON trong MySQL

  3. MySQL Cluster có thể xử lý cơ sở dữ liệu terabyte không

  4. Eclipse - Cách thêm kết nối MariaDB mới

  5. Xóa các giá trị mảng trước khi chèn mysql