62
задан 30 March 2011 в 11:45

1 ответ

Для защиты от Внедрения 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 .

4
ответ дан 31 October 2019 в 14:18

Другие вопросы по тегам:

Похожие вопросы: