Для защиты от Внедрения SQL клиенты могут использовать API языка MongoDB. Таким образом, весь вход является простым значением - команды не могут быть введены. Пример Java:
collection.find(Filters.eq("key", "input value"))
недостаток состоит в том, что Вы не можете легко протестировать свой фильтр. Вы не можете скопировать его в оболочку монго и протестировать его. Особенно проблематичный с более крупными, более сложными фильтрами/запросами.
, НО!!! существует также API для не использования API фильтра - включающий для парсинга любого фильтра json. Пример Java ниже:
collection.find(BasicDBObject.parse("{key: "input value"}"));
Это хорошо, потому что можно скопировать фильтр непосредственно в оболочку MongoDB для проверения его.
, НО!!! (в последний раз, но, я обещаю), что это подвержено инжекции NoSql. Пример Java, где входное значение {$gt: ""}
.
collection.find(BasicDBObject.parse("{key: {$gt: ""}}"));
В этом последнем примере, все возвращается, даже при том, что мы имели в виду только для определенных записей на возврат.
См. здесь более полное объяснение на Внедрении SQL при использовании фильтров непосредственно.
Одна последняя вещь. Я думаю, что существует способ использовать и необработанные фильтры и все еще защитить от Внедрения SQL. Например, в Java, мы можем использовать параметризированные запросы Jongo .