@Vernal96

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

Почитав статьи в интернете, все в один голос утверждают, что чуть ли не единственный способ избежать sql инъекций это использовать плэйсхолдеры. Везде приводится пример прямой подстановки переменных.
Но что если я сам, например, при приме id буду проверять, является ли он цифровым значением.
Или при приеме текстовой переменной, я могу использовать регулярные выражения и в итоге сделать вывод нормальные это данные или нет.
  • Вопрос задан
  • 224 просмотра
Пригласить эксперта
Ответы на вопрос 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 иногда не спасают.
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
21 янв. 2019, в 07:08
700 руб./в час
21 янв. 2019, в 01:19
10000 руб./за проект
20 янв. 2019, в 22:33
30000 руб./за проект