@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 иногда не спасают.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Ведисофт Екатеринбург
от 25 000 ₽
YCLIENTS Москва
от 200 000 до 350 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
04 мая 2024, в 20:37
2000 руб./за проект
04 мая 2024, в 19:54
5000 руб./за проект