Угроза безопасности ввода HTML только для чтения?
Безопасно ли полагаться на данные поля ввода html, настроенного только для чтения? Какова цель поля только для чтения?
Я знаю, что отключенные поля не перемещаются в $_POST, в то время как только для чтения? По сути, то, что я хочу, - это динамическое значение в моей форме, которое остается неизменным для пользователя.
Было бы более уместно разместить это в сеансе или какие у меня есть варианты?
РЕДАКТИРОВАТЬ: Как упоминалось ниже, хранение этого в сеансе - лучшая идея, хотя после чтения Сохранение объектов в сеансе Меня беспокоит производительность и перегрузка сервера данными сеанса. Есть какие-нибудь предложения? Было бы безопасно просто отключить() любые данные сеанса, которые больше не нужны. (Аналогично управлению памятью, но на уровне сеанса? Удалите то, что вам не нужно.)
4 answers
Ну, это будет работать в том смысле, что пользователи не могут помещать текст в поле только для чтения. Но любой мог бы подделать сообщение с легко измененными полями.
Так что нет, это не очень хорошая безопасность.
По другому вашему вопросу вы должны предоставить нам более подробную информацию о том, для чего вам нужно это поле только для чтения. Может быть, сеансы подходят именно вам, может быть, вам больше ничего не нужно делать, кроме как не записывать все, что находится в поле только для чтения, в базу данных при отправке формы.
Если входные данные доступны только для чтения, но вы все равно передаете их значение на сервер, это небезопасно. Очень легко манипулировать источником страницы.
Если вы хотите запомнить какую-то ценность, да, используйте сеансы. Вы можете отобразить его на входе только для чтения, но никогда не передавайте значение через такой вход.
редактировать: Iznogood прав, кто-то может изменить значения сообщений и отправить поддельный заголовок.
Нет. Небезопасно полагаться на данные поля ввода html, настроенного только для чтения. А также небезопасно полагаться на любые данные, предоставленные клиентом.
Это было бы единственным возможным решением разместить это в сеансе
С помощью Firebug вы можете легко сделать запись доступной, так что вам даже не придется подделывать запрос на публикацию, используя что-то вроде curl.
Если он действительно доступен только для чтения, вы можете просто игнорировать его на стороне сервера, поэтому даже изменение значения ничего не изменит с вашими данными (например, в вашей базе данных).
Для меня причина показывать кому-либо файл только для чтения - использовать ту же форму, что и для предварительного просмотра заполненного файла. Но в этом случае вы не должны использовать его для отправки данных на свой сервер снова.
Что касается вашего второго вопроса: Данные сеанса обычно хранятся в текстовом файле на сервере. Он будет удален через некоторое неактивное время (стандартное - 24 минуты). Вас не должно волновать, насколько велики данные. Я также использовал сеанс для хранения нескольких сотен мегабайт для некоторых сценариев. Но рекомендуется отменить настройку данных формы из сеанса после того, как данные были успешно сохранены в базе данных = или на любом другом постоянном носителе). Сохранение его в сеансе также позволит вам пополнять форма, даже если пользователь не нажимает кнопку "Назад" или браузер неправильно восстанавливает данные.