Dynogels передает предоставленные значения фильтра / запроса, используя структуру ExpressionAttributeValues
, которая отделена от самой структуры запроса (FilterExpression
). Это аналогично использованию параметризованных запросов SQL, которые передают параметры в отдельной структуре от самого запроса.
Другими словами, если в качестве значений фильтра вы используете только ненадежный ввод, внедрение, изменяющее структуру запроса, должноневозможно:
// Assume "req.body" is untrusted input
Table.query(req.body.key)
.filter('somecolumn').equals(req.body.somecolumn)
.exec(callback);
Вышеуказанное безопасно, если оно не является уязвимостью уровня приложения, позволяющей пользователю запрашивать любой ключ. Во всех контекстах, где используется ненадежный ввод, он не может повлиять на структуру запроса.
Раскрытие информации: я один из тех, кто поддерживает диногелей. Если вы обнаружите уязвимость, пожалуйста, сообщите нам об этом в частном порядке, чтобы мы могли ее устранить, прежде чем публиковать подробности.