Инъекция NoSQL в DynanmoDB

Кто-нибудь знает, есть ли какие-либо известные уязвимости SQL с библиотекой Dynogels при взаимодействии с базой данных NO SQL.

Не используя никаких сложных запросов, только стандартное болото с существующими методами. query(), где (), equals() и т. д.

2 ответа

Решение

Dynogels передает предоставленные значения фильтра / запроса, используя ExpressionAttributeValues структура, которая отделена от самой структуры запроса (FilterExpression). Это аналогично использованию параметризованных запросов SQL, которые передают параметры в отдельной структуре от самого запроса.

Другими словами, пока вы используете только ненадежный ввод в качестве значений фильтра, внедрение, изменяющее структуру запроса, не должно быть возможным:

// Assume "req.body" is untrusted input
Table.query(req.body.key)
    .filter('somecolumn').equals(req.body.somecolumn)
    .exec(callback);

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


Раскрытие информации: я являюсь одним из разработчиков диногелей. Если вы обнаружите уязвимость, сообщите нам о ней в частном порядке, чтобы мы могли устранить ее до публичной публикации сведений.

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

Поскольку вы часто имеете дело с JSON в DynanmoDB, будьте особенно осторожны при десериализации пользовательского ввода в объекты JSON и вставке или обновлении этих объектов непосредственно в базу данных NoSQL. Например, убедитесь, что пользователь не может добавлять дополнительные поля в объект JSON.

Все зависит от того, как вы проверяете вводимые пользователем данные.

Я думаю, можно с уверенностью сказать, что базы данных NoSQL больше обращаются к базе данных с точки зрения функций и объектов JSON. Вам нужно меньше беспокоиться о SQL-инъекциях, чем о традиционныхstring based access (TSQL) базы данных.

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