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

Как запретить локальное редактирование input значения перед отправкой формы?

Имеем обычную POST форму
<form action="test.php" method="POST">
<input type="hidden" value="id" value="1">
<input type="submit" name="submit" value="POST">
</form>


В общем при отправке в $_POST мы должны строго получать ид=1 т.к. пользователь не видит этого инпута и в теории даже не знает о его существование. Но Если открыть консоль браузера и в ручную изменить код инпута, к примеру на value=2222
То и POST спокойно отправит это значение. Так же с disabled элементами и тд. По сути можно хоть как обманывать POST. Есть ли какое-то решение этой ситуации?) Простите если вопрос вдруг глупый, но что-то не надумал ничего)
  • Вопрос задан
  • 389 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 3
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Непреложная истина: Все что находится на/приходит с клиента может и будет изменено с целью взлома/вреда.

Защищать что-либо на фронтэнде абсолютно нет смысла, все проверки делаются на сервере.

Если открыть консоль браузера и в ручную изменить код инпута, к примеру на value=2222
То и POST спокойно отправит это значение.
Ваша задача проверить имеет ли клиент право на изменение объекта с данным значением. Остальное не особо важно, даже если он подставил это значение руками.
Ответ написан
Комментировать
@vdem
Сохранять нужное значение в сессии ($_SESSION) и при отправке формы брать его из сессии, а не формы.
P.S. Только не забыть сделать session_start() до какого-либо вывода в PHP.
Ответ написан
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Если нужно передать какие-то данные немодифицируемыми - шифруйте их на сервере, запихивайте в форму, при получении данных формы - расшифровывайте и пользуётесь неизменёнными данными. Вуаля, профит!

Но есть способ проще и лучше - храните данные в сессии на стороне сервера, а клиенту передавайте только ID этой сессии, и пускай пытается что-нибудь модифицировать...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@randm18 Автор вопроса
ну я к примеру привел скрытую форму. Допустим возьмем select с разными опциями. Что помешает вместо г.Барнаул написать, что-то плохое и отправить в базу?) В таком случае конечно да, можно на беке проверять есть ли вообще такое слово и кидать ошибку при его отсутствие. Вообще стараюсь такие вещи избегать и как раз все проверять на серверной части, но просто стало интересно, вдруг есть какие-то способы стандартные) В общем вопрос по большей степени для саморазвития.
А если у нас список того, что в форме формируется динамично, прям в момент загрузки страницы. Допустим мы не заполняем шаблонную форму логина и пароля, а формируем какой-то отчетный шаблон.
Мол из базы достаем список индикаторов и для них выводим строки. Тогда удобно скрытым полем списывать ИД индикатора, что бы в дальнейшем обрабатывая понимать, что работаем именно с ним.
Ответ написан
Ваш ответ на вопрос

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

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