Trả lời
Sử dụng một trong các trình điều khiển được hỗ trợ. Không deserialize chuỗi như JSON và vượt qua chúng như các truy vấn, ví dụ: không' làm điều này (trong Ruby):
collection.send(query_type, JSON.parse(parameters))
nơi query_type
và parameters
là chuỗi đến từ một biểu mẫu. Bạn sẽ phải là tội phạm ngu ngốc để làm điều này mặc dù.
Vì không có ngôn ngữ truy vấn nên không có cùng một phòng để tiêm. Một phần lý do mà các cuộc tấn công SQL injection có thể là hành động cần thực hiện (SELECT
, UPDATE
, DELETE
, v.v.) là một phần của chuỗi truy vấn. MongoDB và nhiều cơ sở dữ liệu mới hơn, không hoạt động như vậy, thay vào đó hành động là một phần của API. Khi trình điều khiển SQL chỉ có query
và trong một số trường hợp là exec
, MongoDB có find
, update
, insert
và remove
.
Hầu hết các trình điều khiển được thiết lập nơi bạn xây dựng truy vấn dưới dạng ngôn ngữ trình bày tài liệu BSON. Bạn định sử dụng ngôn ngữ mongo nào?
Bạn có thể xây dựng các truy vấn MongoDB bằng Javascript trong mệnh đề where và tại đây việc tiêm có thể xảy ra. Ở đây giải thích cách ngăn chặn điều này: http://www.mongodb.org/display/DOCS/Do+I+Have+to+Worry+About+SQL+Injection
có, bằng cách sử dụng tìm kiếm regex. Ví dụ: giả sử bạn kiểm tra bằng tên người dùng và bạn không sử dụng EQ op. Nếu tôi vượt qua [a-z], ví dụ tôi sẽ bỏ qua hành động đăng nhập của bạn :).
Nhưng dù sao, nó phụ thuộc rất nhiều vào logic về cách thức mọi thứ được thực hiện trong giải pháp.
Bạn có thể làm rõ câu hỏi của mình bằng ngôn ngữ bạn định giao tiếp mongo không? Đã cập nhật câu hỏi –
câu hỏi – Mark