Как MongoDB избежать беспорядка SQL-инъекции?



Я читал свою верную книгу О'Рейли и наткнулся на отрывок о том, как Монго, по своей природе, избегает болота ошибок, подобных SQL-инъекциям.



в моей кишке, я думаю, что понимаю это. Если необеззараженных Варс передаются в запросы, они не могут вырваться из документа-ориентированная структура запроса с UNION,JOIN запрос получился комментарий и т. д.



как MongoDB избежать беспорядка инъекции SQL? Это просто по природе этого синтаксиса запроса?

721   5  

5 ответов:

MongoDB избегает потенциальных проблем, не разбирая.

любой API, в любом месте, который включает кодирование пользовательских данных в форматированном тексте, который анализируется, может привести к тому, что вызывающий и вызываемый абоненты не согласятся с тем, как этот текст должен быть проанализирован. Эти разногласия могут быть проблемами безопасности, когда данные неверно интерпретируются как метаданные. Это верно, если вы говорите о строках формата printf, включая пользовательский контент в HTML или создание SQL.

с тех пор MongoDB не анализирует структурированный текст, чтобы выяснить, что делать, нет возможности неверно интерпретировать пользовательский ввод как инструкции, и, следовательно, нет возможной дыры в безопасности.

кстати, совет избегать API, которые требуют разбора, - это пункт 5 в http://cr.yp.to/qmail/guarantee.html. Если вы заинтересованы в написании безопасного программного обеспечения, другие 6 предложений также стоит посмотреть.

подводя итог MongoDB документация

BSON

как клиентская программа собирает запрос в MongoDB, он строит Объект BSON, а не строка. Таким образом, традиционные атаки SQL-инъекций являются не проблема.

однако MongoDB не застрахован от инъекционных атак. Как отмечается в той же документации, инъекционные атаки все еще возможны, поскольку операции MongoDB позволяют произвольно Выражения JavaScript, которые будут выполняться непосредственно на сервере. В документации подробно говорится об этом:

http://docs.mongodb.org/manual/faq/developers/#javascript

база данных может не анализировать содержимое, но есть и другие уязвимые области кода.

https://www.owasp.org/index.php/Testing_for_NoSQL_injection

для защиты от 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, мы можем использовать параметризованные запросы Джонго.

Comments

    Ничего не найдено.