Tôi đang xây dựng một API REST cho một dịch vụ để truy vấn cơ sở dữ liệu MongoDB. Ban đầu, tôi đã đi đường tiêu chuẩn cung cấp "/ user/1" để tìm kiếm id người dùng 1, v.v. Khi tôi tiếp tục tham gia dự án, các nhà phát triển khác bắt đầu hỏi liệu chúng tôi có thể thêm khả năng tìm kiếm boolean hay không, chẳng hạn như "và", "không" và "hoặc". Nghĩ về khối lượng công việc cần thiết để tạo ra một DSL cho điều này, tôi nghĩ về chỉ có REST API chấp nhận một đối tượng MongoDB truy vấn JSON, như vậy (giả vờ này được truyền qua POST):Có phơi bày truy vấn mongodb trên REST API an toàn không?
/query/{"$or": [{"user": "1", "user", "2"}]}
Bây giờ, trước khi tôi vượt qua truy vấn đến MongoDB, tôi sẽ làm như sau:
- Validate đối tượng JSON
- Hãy chắc chắn rằng chuỗi chỉ được sử dụng trong
query
chức năng, khôngupdate
,runcommand
, hoặcaggregation
- Xác minh rằng không có
$where
khoản trong truy vấn, since that allows script execution
Would làm điều này là đủ để ngăn chặn tiêm? Đọc MongoDB FAQ, có vẻ như việc chuyển JSON vào hoạt động truy vấn là vô hại, vì bạn không thể chạy bất kỳ javascript nào với nó (ngoại trừ $ where). Đây có phải là phương pháp an toàn để thực hiện không?
có vẻ như bạn đang dùng cách tiếp cận mà tôi muốn thực hiện trên điểm cuối còn lại của mình, tôi có một câu hỏi mở về vấn đề này. http://stackoverflow.com/questions/25555956/mongodb-query-constructor-to-take-raw-query-string-java sẽ biết ơn nếu bạn có thể chia sẻ bất kỳ thông tin nào về cách tiếp cận có thể có. Chúc mừng – Will