Pull to refresh

Comments 11

UFO just landed and posted this here

Можно ещё хранимые процедуры использовать.

А что, их в Монгу уже завезли?
А где про Монгу написано было?
В этом что-то уникальное есть?
SELECT name FROM users WHERE login = \"" + login + "\""

В других СУБД так нельзя что ли?

Вы привели пример давно решенной проблемы, который был приведен в статье исключительно чтобы налить воды. А реальная проблема — вот эта:


{
  paramA: userInput.paramA,
  paramB: {$in: [
    userInput.paramB[0],
    userInput.paramB[1],
  ]},
}

$in может встречаться много где. Скажем, sequelize — ORM для SQL на node.js имеет подобный синтаксис.

Согласен. Но возражение будет то же самое — в sequelize нет своих хранимок, а если пользоваться хранимками базы — то зачем вообще sequelize?
Чтобы избежать эту проблему, нужно всегда писать команды так, чтобы их нельзя было получить от пользователя.

Спасибо, Кэп, это ведь все, что ты хотел сказать?

На самом деле проблема глубже: нельзя данные делать слишком «умными». А идеально — максимально жестко ограничивать формат.
К примеру, если мы ждем параметр «цвет» в формате RGB, то нужно проверять, чтобы это была последовательность символов 0-9, A-F из 6 знаков. даже символ # не нужно разрешать, его можно и так подставить. 6 знаков, не 7, не 8…

Понятно, что данные надо валидировать/санитайзить. Вопрос в том, как сделать так, чтобы забыть это было сложнее.

Sign up to leave a comment.