Есть ли возможность инъекции nosql через mongoimport [duplicate]

Типы ссылок по умолчанию равны null, чтобы указать, что они не ссылаются на какой-либо объект. Следовательно, если вы попытаетесь получить доступ к объекту, на который ссылаетесь, а его нет, вы получите исключение NullReferenceException.

Для Ex:

SqlConnection connection = null;
connection.Open();

Когда вы запускаете это кода, вы получите:

System.NullReferenceException: Object reference not set to an instance of an object.

Вы можете избежать этой ошибки, например, следующим образом:

if (connection != null){
    connection.Open();
}

Примечание. Чтобы избежать этой ошибки, вы всегда должны инициализировать свои объекты прежде чем пытаться что-либо сделать с ними.

51
задан Niels van der Rest 30 March 2011 в 08:45
поделиться

5 ответов

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

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

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

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

40
ответ дан btilly 28 August 2018 в 04:00
поделиться

Чтобы защитить от 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 .

3
ответ дан AlikElzin-kilaka 28 August 2018 в 04:00
поделиться

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

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

3
ответ дан Brian Blain 28 August 2018 в 04:00
поделиться
16
ответ дан James 28 August 2018 в 04:00
поделиться

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

BSON

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

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

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

24
ответ дан Pero P. 28 August 2018 в 04:00
поделиться
Другие вопросы по тегам:

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