Как MongoDB избежать беспорядка SQL-инъекции?
Я читал свою верную книгу О'Рейли и наткнулся на отрывок о том, как Монго, по своей природе, избегает болота ошибок, подобных SQL-инъекциям.
в моей кишке, я думаю, что понимаю это. Если необеззараженных Варс передаются в запросы, они не могут вырваться из документа-ориентированная структура запроса с UNION,JOIN запрос получился комментарий и т. д.
как MongoDB избежать беспорядка инъекции SQL? Это просто по природе этого синтаксиса запроса?
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, которые будут выполняться непосредственно на сервере. В документации подробно говорится об этом:
с PHP mongoDB может стать уязвимым для инъекции No-SQL:
http://www.idontplaydarts.com/2010/07/mongodb-is-vulnerable-to-sql-injection-in-php-at-least/
для защиты от 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