Здравствуйте!
Предположим, есть страница, на которой выводится список пользователей и напротив каждого пользователя есть кнопка "добавить в друзья" или "заблокировать". Логично, чтобы отследить для какого пользователя была нажата кнопка, её можно разместить вместе с input полем с типом hidden с значением равным id пользователя в базе.
<form method="post">
<input name="user_id" type="hidden" value="22">
<input name="add_friend" type="submit" value="Добавить в друзья">
</form>
Собственно в таком типе реализации меня мучает следующий вопрос: в отладчике видно все скрытые поля и их значения и пользователю ничего не мешает в hidden-input вставить значение не 22, а, допустим, 100 и таким образом на сервер действительно придет значение user_id = 100, а не 22, напротив которого кнопка была нажата. Получается, что пользователь может таким образом добавить в друзья того, кто даже не прислал ему запрос.
Понятное дело, что должны быть проверки на то, действительно ли был отправлен запрос и т.д. но все же можно как-то избежать или не допустить подмены значения в hidden поле или же есть более лучшее решение для реализации подобного механизма?
Заранее благодарю за ответ!
Hidden поля в html не предназначены для хранения защищенных данных. Их основное предназначение - отправка дополнительных атрибутов при отправке формы с последующей проверкой на сервере, чтобы они не мешали пользователю при заполнении формы.
Таким образом, нельзя полагаться на защищенность данных ни при каких обстоятельствах, если эти данные хранятся на клиенте.
В вашем случае в любом случае необходима проверка на сервере, что добавляемый в друзья пользователь ранее присылал запрос.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Ребят , такой вопрос: нужно сделать выпадающий "чат", но чтоб задаваемый вопрос отправлялся на почтуа не в онлайн режиме
Как на одной сетке CSS-Grid наложить два объекта так чтобы один оказался снизу, а другой сверху?
Здравствуйтедля того чтобы был адаптивным сайт нужно указывать <meta name="viewport" content="width=device-width, initial-scale=1