@lexstile

На что проверять строку, введенную со стороны пользователя на php?

Какие базовые проверки требуется осуществить, чтобы более-менее соответствовать нормам безопасности?
Т. е. приходит строка, введенная в html-форму со стороны пользователя.
Что нам с ней делать?
Например:
  • Убрать пробелы? (trim())
  • убрать теги? (strip_tags())
  • ...

Что-то еще или может быть эти проверки не нужны?
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Это хороший вопрос, который довольно часто задают новички, поскольку они все поголовно подвержены очень распространенному заблуждению - что опасность заключается в самих данных, и их, следовательно, можно как-то "обезопасить". Что "данные" в приложении - это некий универсальный абстрактный объект, который можно универсально же обработать.

Но если подумать, то ответ становится очевидным: не бывает таких "проверок", которые автоматически делают данные "безопасными".
Поиск таких универсальных проверок - это такая же глупость, как поиск "базовых правил безопасности для человека". Ты встречал кого-нибудь, кто все время носит каску, наколенники, бронежилет и презерватив? Независимо от того, собрался он кататься на роликах, на войну, или на свидание?

Данные не бывают "опасными" или "безопасными" сами по себе.
Всё зависит от контекста.
А любая обработка "просто на всякий случай" тупо испортит данные.
К примеру твоя strip_tags() изуродует математический текст, в котором встречаются символы "больше" и "меньше".

Поэтому и надо форматировать данные перед использованием, в зависимости от конкретного контекста, а не заранее. Используем в SQL? Применяем подготовленные выражения. Используем в HTML? Применяем htmlscpecialchars. Используем в URL? Применяем urlencode. Используем в яваскрипте? Применяем json_encode. И так далее. Тебе уже самому должно быть смешно, глядя на этот набор "базовых проверок", если их накатывать все скопом.

Плюс не надо путать форматирование данных и их валидацию.
Валидация, в принципе, хорошая вещь, но надо понимать что во-первых, она не имеет никакого отношения к безопасности, и не может заменить контекстное форматирование данных, а во-вторых, уж тем более не может быть "универсальной" по определению.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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