Задать вопрос
@Vernal96

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

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽