Нужно ли валидировать данные на стороне сервера, если поля ввода итак уже выполняют эту функцию?

207
30 января 2018, 11:08

У меня всего два поля: имя пользователя и email. Правила валидации очень простые: имя 1-255 символов и email в соответствии с регулярным выражением; оба поля обязательные. Всё это можно достичь на чистом HTML: два поля, второе имеет тип email, и оба с атрибутом required. Даже при отключённом JavaScript сам HTML не даст отправить пустые или невалидные данные.

И тем не менее, нужно ли валидировать данные на стороне сервера (я пишу на Laravel). Мне не так трудно прописать все эти правила, но как это всё тестировать, если пустые или невалидные данные мне просто HTML не даст отправить?

Answer 1

Главное правило программирования бэкенда - никогда не доверять клиенту!

Забудьте что там на клиенте есть какая-то валидация. Она сделана не для вас, она сделана для пользователя.

Злоумышленник всегда может нажать F12 и исправить вашу форму как ему будет угодно, удалив всю валидацию к чертям:

А продвинутые хакеры знают про wget и curl, позволяющие отправить любой запрос вовсе не заходя на сайт в браузере.

Наконец, можно даже утянуть вашу форму на отдельный сайт в инете, позволив тем самым любому неспециалисту вводить любые данные.

Answer 2

Конечно нужно, так как никто не запрещает через консоль браузера изменить весь html код на вашей странице и в том числе убрать required у любых полей формы

Или еще хуже, если у Вас например присутствует ajax на странице и пользователь видит адреса, по которым отправляются запросы, он может простой функцией в консоли начать спамить запросами на сервер

READ ALSO
Нужен ли CMS сайту?

Нужен ли CMS сайту?

Создаю сайт-каталог для магазина, можно сказать, что уже заканчиваюСейчас на этапе создания страницы товара, где будет полное описание о товаре,...

234
Вывод цифровой клавиатуры в maskedInput PHP Yii2

Вывод цифровой клавиатуры в maskedInput PHP Yii2

Ребят, вот есть у меня поле формы, которое рендерится виджетом MaskedInput (Yii2)Хотелось бы по фокусу на мобильных выводить только цифровую клаву

215