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

Oci_bind_by_name có ngăn chặn việc tiêm SQL một cách an toàn không?

Sử dụng các tham số liên kết là đủ trong các trường hợp phổ biến và thực hành tốt để tránh chèn SQL.

Nhưng một tham số trong một câu lệnh đã chuẩn bị chỉ có thể được sử dụng cho một giá trị trong một biểu thức SQL. Nói cách khác, nơi bạn thường viết một chuỗi ký tự được trích dẫn, ký tự ngày được trích dẫn hoặc một ký tự số. Và một tham số ==một giá trị (không có danh sách).

Bạn nên sử dụng các tham số ràng buộc cho những trường hợp đó. Nếu bạn đang hỏi câu hỏi này vì bạn nghĩ rằng bạn có thể muốn bỏ qua việc sử dụng các tham số bị ràng buộc nếu ai đó trả lời rằng họ không đủ, thì xin lỗi, bạn sẽ không được miễn thực hành lập trình an toàn.

Tuy nhiên, có những trường hợp khác (có lẽ ít phổ biến hơn) mà các tham số ràng buộc không hoạt động. Nếu bạn cần viết một truy vấn với tên bảng động, tên cột hoặc số nhận dạng khác hoặc toàn bộ biểu thức hoặc từ khóa SQL, thì bạn cần một phương pháp khác. Các trường hợp này phải được sửa trong cú pháp SQL tại chuẩn bị thời gian, vì vậy chúng không thể được tham số hóa.

Ví dụ:đây là một truy vấn có các phần động được biểu thị bằng cách sử dụng các biến, không thể là tham số:

$sql = "SELECT * FROM mytable ORDER BY $column_of_users_choice $asc_or_desc";

Bạn nên sử dụng danh sách trắng cho những trường hợp đó . Nói cách khác, hãy đảm bảo rằng một chuỗi bạn nội suy vào truy vấn của mình dưới dạng tên bảng động thực sự là một trong các bảng tồn tại trong cơ sở dữ liệu của bạn. Đảm bảo rằng các từ khóa SQL là các từ khóa hợp pháp.

Không bao giờ lấy nguyên văn đầu vào của người dùng và nội suy nó thành SQL (hoặc bất kỳ mã nào khác được phân tích cú pháp trong thời gian chạy, như đối số bạn cấp cho eval() hoặc shellexec() ). Và không chỉ đầu vào của người dùng có thể là nội dung không an toàn.

Xem thêm bản trình bày của tôi Sai lầm và Sai lầm của SQL Injection để được giải thích thêm.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle ORA-01805 trên cơ sở dữ liệu Oracle 11g

  2. Chia bảng thành các cột cấp độ khác nhau

  3. Danh sách Ngày + Giờ giữa hai ngày

  4. Cách chèn một chuỗi có chứa &

  5. Lỗi SQL:ORA-02000:thiếu từ khóa LUÔN khi tạo bảng dựa trên cột nhận dạng