@Vernal96

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

Почитав статьи в интернете, все в один голос утверждают, что чуть ли не единственный способ избежать sql инъекций это использовать плэйсхолдеры. Везде приводится пример прямой подстановки переменных.
Но что если я сам, например, при приме id буду проверять, является ли он цифровым значением.
Или при приеме текстовой переменной, я могу использовать регулярные выражения и в итоге сделать вывод нормальные это данные или нет.
  • Вопрос задан
  • 237 просмотров
Пригласить эксперта
Ответы на вопрос 7
@neol
Инъекции (как и любые распространённые типы уязвимостей) появляются не потому, что невозможно что-то сделать, а потому, что кто-то забыл, перепутал, опечатался или ошибся. Если у вас нет возможности накосячить (или она сведена к минимуму) - это в любом случае надёжнее, чем когда у вас есть возможность не накосячить. Именно поэтому подготовленные запросы считаются надёжнее любых проверок переменных, rust считается безопаснее C и т. д.
Ответ написан
Комментировать
Adamos
@Adamos
Чем меньше программист должен думать над кодом - тем надежнее будет код.
Используя плейсхолдеры или более современные методы работы с базой, вы освобождаете свою голову от рутины (с которой компьютер справляется лучше человека) и можете сосредоточиться на действительно важных вещах.

А во-вторых, код, который никто никогда не правил - никому не нужный код. А тот, кто правит, может не знать, что тут везде раскиданы грабли и надо быть осторожным. Даже если это будете вы сами через год-два.
Ответ написан
Комментировать
kotomyava
@kotomyava
Системный администратор
Если вы имеете в виду prepared statments в PDO, то нет смысла их не использовать. А как вы будете дополнительно проверять свои входные данные (а это, в общем-то, делать всё равно надо), уже не так важно.
Ответ написан
Комментировать
@fedot1325
Можно не использовать плейсхолдеры и проверять весь юзер инпут, но будут проблемы, когда вы захотите получать строки.
А в чем проблема использовать плейсхолдеры?
Ответ написан
Нет, не имеет. Это всего лишь защита от дурака, как и большинство прочих запретов (goto, eval, etc). Под капотом у вас все равно будет обыкновенное экранирование, если вы явно не включите серверные prepared statements.

Так что для 90% проектов с PDO практический разницы в плане защищенности от инъекций между плейсхолдерами и велосипедом с каким-нибудь sprintf - нет.
Ответ написан
Комментировать
AlexMaxTM
@AlexMaxTM
Плэйсхолдеры не обязательно использовать. Проверять лучше всегда самому, а то вдруг там потом опять окажется какая-то уязвимость в исходниках :))))
Ответ написан
Комментировать
batyrmastyr
@batyrmastyr
Для чисел хватит и ручной проверки.
Для произвольных строк ручной проверки не хватит по нескольким причинам:
1) Экранировать нужно не пару символов и даже не десяток.
2) Помножим это на разнообразие кодировок и проверку существования пришедших символов в выбранной кодировке ("испорченные биты").
3) Даже подстановки силами PDO иногда не спасают.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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