Могу ли я доверять тому, что требуемые элементы ввода имеют отправленные значения?

Могу ли я доверять обязательному атрибуту для своих полей в форме?

<input type="text" name="username" required/>

Приведенный выше код гарантирует, что это обязательное поле, но не может ли пользователь просто проверить элемент и удалить атрибут? Нужно ли мне проверять if (isset($_POST... или я могу полагаться на требуемый атрибут, чтобы сделать это?


person metro-man    schedule 29.08.2014    source источник
comment
Никогда нельзя доверять тому, что делается на клиенте. Нет причин предполагать, что POST исходит из веб-браузера, это может быть скрипт.   -  person Barmar    schedule 29.08.2014
comment
Да, пользователь может удалить атрибут через консоль. Вы всегда должны проверять как серверную, так и клиентскую сторону. Проверка на стороне клиента должна рассматриваться как приятная мелочь, чтобы сделать процесс более приятным, но на нее не следует полагаться.   -  person scrowler    schedule 29.08.2014
comment
В старых браузерах даже не было обязательного тега, так что старый браузер тоже обходил это.   -  person Jeff Clayton    schedule 29.08.2014
comment
О, хорошо, это имеет смысл   -  person metro-man    schedule 29.08.2014
comment
Суть в том, чтобы предупредить пользователя о том, что у вас есть ограничение, которое не будет выполнено после его отправки. Следовательно, в некоторых браузерах это будет делать свое дело (учитывая правильный браузер/версию) и предупреждать пользователя о том, что он собирается совершить ошибку, но ваше дело в том, чтобы сначала проверьте на сервере все, что отправлено пользователем.   -  person Jared Farrish    schedule 29.08.2014


Ответы (4)


Всегда используйте проверку на стороне сервера. Требуемый атрибут существует во внешнем интерфейсе, и им можно легко манипулировать, если злоумышленник захочет изменить DOM.

person Anth Bieb    schedule 29.08.2014

необходимое свойство добавлено в html5, работает с большинством браузеров, проблема, как всегда, в том, что ie не работает, и другие старые браузеры, следовательно, не будут доверять этому атрибуту.

person 0rochimaru    schedule 29.08.2014

Проверка всегда должна выполняться на стороне сервера. Есть такие вещи, как interception proxy, которые могут обойти даже проверку Javascript. Таким образом, вы даже не можете использовать Javascript для проверки. Вы можете использовать их, чтобы информировать пользователей о том, что эти поля являются обязательными, но полагаться на них — плохая практика.

person Alley Shairu    schedule 29.08.2014

Проверка на стороне сервера — ваш лучший выбор. В настоящее время Safari на рабочем столе и iOS, а также браузеры Android не поддерживают атрибут «required» любого типа ввода в качестве средства проверки отправки (хотя селектор псевдокласса css поддерживается, как ни странно).

ссылка: http://www.wufoo.com/html5/attributes/09-required.html

person Dajofo    schedule 29.08.2014