PHP

Запретить изменение скрытого поля input type="hidden" через консольку браузера.

Есть форма комментариев, и в ней в скрытом поле я передаю идентификатор статьи к которой добавляется комментарий.
Все работает. Но проблема в том, что если пользователь откроет консольку и пропишет туда другой идентификатор, то при добавлении комментария в базу, его изменение засчитывается.
То есть вместо реального идентификатора статьи (10) туда может попасть id прописанный пользователем (101).
Есть способ заставить скрипт проигнорировать внешнее воздействие на input?
Ronny Coleman
Ronny Coleman
226
Не знаю, при чём тут php, но это нереализуемо.
Ты не с той стороны решаешь задачу. Нужно не запрещать пользователю что-то делать у себя в браузере (не запретишь), а на сервере при добавлении проверять права на изменение чего-либо.
Можно, конечно, при открытии страницы считать значение этого поля в переменную, видимость переменной сделать не глобальной, а потом через setInterval вписывать это значение обратно. Но здесь всё будет зависеть от удачи. К тому же, если кто-то хочет что-то поменять или удалить, он не пользуется оригинальной страницей и не меняет значения на ней, он просто шлёт запрос на сервере через curl, подставляя туда то, что нужно. И тогда делай на странице что хочешь, это не помешает.
Если не понятно, то процесс такой: открываешь вкладку network, редактируешь/удаляешь что нужно, смотришь, какой ушёл запрос на сервер, копируешь его, правишь как надо (меняешь id) и шлёшь этот запрос уже без участия исходной страницы.
Как видишь, твой метод не решает проблему, так что задавать вопрос нужно не о том, как заблокировать поле, а о том, как не дать удалить то, что удалять запрещено.
Ivan Vahrushev
Ivan Vahrushev
65 738
Лучший ответ
Ronny Coleman Спасибо за ответ. Скрытые поля удалил и реализовал через сессию. При переходе на эту страницу создается $_SESSION с идентификатором страницы, а в обработчике этот id применяется при занесения комментария в базу, а после сессия удаляется. Вроде все работает правильно.
Такая реализация норма, как считаешь?
По-моему такого способа запретить менять значение input. Если сайт получает ID из скрытой формы методом GET или POST, то по-любому его можно подделать.

Можно записывать в input хэш-значение ID и проверять его в php-коде. Думаю это самый надежный способ.

По моему опыту мало кто лазит в консоли и меняет ID, чтобы связать комментарий с другой статьей. Ни одного случая пока не было. Больше всего напрягает спам, но это отдельная тема )
Икром Гуломов
Икром Гуломов
89 891
Решил как то таким образом с помощью скрипта

Защита от подделки userid и username.
function saveFile() {

document.getElementById("jform_userid").value = "<?php echo $userid?>";
document.getElementById("jform_username").value = "<?php echo $username?>";
}
setInterval(saveFile, 300);//автовыполнение скрипта каждые 0,3 секунды

Таким образом, наши поля будут автозаполняться каждые 0,3 секунды, подделать такое крайне сложно.

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