Типы ссылок по умолчанию равны 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();
}
Примечание. Чтобы избежать этой ошибки, вы всегда должны инициализировать свои объекты прежде чем пытаться что-либо сделать с ними.
MongoDB избегает потенциальных проблем, не анализируя.
Любой API, где угодно, который включает кодирование пользовательских данных в форматированном тексте, который получает разобранный, имеет потенциал для того, чтобы вызывающий и вызываемый не согласились с тем, как этот текст должен быть проанализирован. Эти разногласия могут быть проблемами безопасности, когда данные неверно истолковываются как метаданные. Это верно, если вы говорите о строках формата printf, включая созданный пользователем контент в HTML или генерируете SQL.
Поскольку MongoDB не анализирует структурированный текст, чтобы выяснить, что делать, нет возможности неправильного толкования ввода пользователем в качестве инструкций и, следовательно, никакого возможного отверстия для обеспечения безопасности.
Кстати, совет по избеганию API-интерфейсов, требующих разбора, - это пункт 5 в http://cr.yp.to/qmail/guarantee .html . Если вы заинтересованы в написании безопасного программного обеспечения, другие 6 предложений тоже стоит посмотреть.
Чтобы защитить от 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 .
База данных не может анализировать содержимое, но есть другие области уязвимого кода.
С PHP mongoDB может стать уязвимым для инъекции без SQL:
http://www.idontplaydarts.com/2010/07/mongodb-is-vulnerable-to-sql-injection -in-php-at-less /
Подводя итог документации MongoDB
BSON
Поскольку клиентская программа собирает запрос в MongoDB, он строит объект BSON, а не строка. Таким образом, традиционные атаки SQL-инъекций не являются проблемой.
blockquote>Однако MongoDB не защищен от инъекций. Как отмечено в той же документации, атаки на инъекции по-прежнему возможны, поскольку операции MongoDB позволяют выполнять произвольные выражения JavaScript непосредственно на сервере. Документация подробно рассматривается в этом документе: