Theo cách tôi thấy, các cuộc tấn công tiêm SQL có thể được ngăn chặn bằng cách:
- Sàng lọc cẩn thận, lọc, mã hóa đầu vào (trước khi chèn vào SQL)
- Sử dụng các câu lệnh / truy vấn tham số đã chuẩn bị
Tôi cho rằng có những ưu và nhược điểm đối với từng loại, nhưng tại sao # 2 lại cất cánh và được coi là ít nhiều là cách thực tế để ngăn chặn các cuộc tấn công tiêm chích? Có phải nó chỉ an toàn hơn và ít bị lỗi hơn hoặc có các yếu tố khác?
Theo tôi hiểu, nếu số 1 được sử dụng đúng cách và tất cả các cảnh báo đều được quan tâm, thì nó có thể hiệu quả như số 2.
Vệ sinh, Lọc và Mã hóa
Có một số nhầm lẫn về phía tôi giữa việc vệ sinh , lọc và mã hóa có nghĩa là gì. Tôi sẽ nói rằng vì mục đích của tôi, tất cả những điều trên có thể được xem xét cho tùy chọn 1. Trong trường hợp này tôi hiểu rằng vệ sinh và lọc có khả năng sửa đổi hoặc loại bỏ dữ liệu đầu vào, trong khi mã hóa bảo tồn dữ liệu như hiện tại , nhưng mã hóa nó đúng cách để tránh các cuộc tấn công tiêm. Tôi tin rằng việc thoát dữ liệu có thể được coi là một cách mã hóa nó.
Truy vấn tham số so với thư viện mã hóa
Có câu trả lời trong đó các khái niệm parameterized queries
và encoding libraries
được điều trị thay thế cho nhau. Sửa lỗi cho tôi nếu tôi sai, nhưng tôi có ấn tượng rằng chúng khác nhau.
Tôi hiểu rằng encoding libraries
, dù họ có tiềm năng sửa đổi "Chương trình" SQL tốt đến đâu, bởi vì họ đang thực hiện các thay đổi đối với chính SQL, trước khi nó được gửi đến RDBMS.
Parameterized queries
mặt khác, gửi chương trình SQL đến RDBMS, sau đó tối ưu hóa truy vấn, xác định kế hoạch thực hiện truy vấn, chọn các chỉ mục sẽ được sử dụng, v.v., sau đó cắm dữ liệu, là bước cuối cùng bên trong RDBMS Chính nó.
Thư viện mã hóa
data -> (encoding library)
|
v
SQL -> (SQL + encoded data) -> RDBMS (execution plan defined) -> execute statement
Truy vấn tham số
data
|
v
SQL -> RDBMS (query execution plan defined) -> data -> execute statement
Ý nghĩa lịch sử
Một số câu trả lời đề cập rằng trong lịch sử, các truy vấn được tham số hóa (PQ) đã được tạo vì lý do hiệu suất và trước khi các cuộc tấn công tiêm chích mà các vấn đề mã hóa nhắm mục tiêu trở nên phổ biến. Tại một số điểm, rõ ràng là PQ cũng khá hiệu quả để chống lại các cuộc tấn công tiêm. Để giữ đúng tinh thần của câu hỏi của tôi, tại sao PQ vẫn là phương pháp được lựa chọn và tại sao nó lại phát triển vượt bậc so với hầu hết các phương pháp khác khi nói đến việc ngăn chặn các cuộc tấn công tiêm nhiễm SQL?