Есть форма комментариев, и в ней в скрытом поле я передаю идентификатор статьи к которой добавляется комментарий.
Все работает. Но проблема в том, что если пользователь откроет консольку и пропишет туда другой идентификатор, то при добавлении комментария в базу, его изменение засчитывается.
То есть вместо реального идентификатора статьи (10) туда может попасть id прописанный пользователем (101).
Есть способ заставить скрипт проигнорировать внешнее воздействие на input?
PHP
Запретить изменение скрытого поля input type="hidden" через консольку браузера.
Не знаю, при чём тут php, но это нереализуемо.
Ты не с той стороны решаешь задачу. Нужно не запрещать пользователю что-то делать у себя в браузере (не запретишь), а на сервере при добавлении проверять права на изменение чего-либо.
Можно, конечно, при открытии страницы считать значение этого поля в переменную, видимость переменной сделать не глобальной, а потом через setInterval вписывать это значение обратно. Но здесь всё будет зависеть от удачи. К тому же, если кто-то хочет что-то поменять или удалить, он не пользуется оригинальной страницей и не меняет значения на ней, он просто шлёт запрос на сервере через curl, подставляя туда то, что нужно. И тогда делай на странице что хочешь, это не помешает.
Если не понятно, то процесс такой: открываешь вкладку network, редактируешь/удаляешь что нужно, смотришь, какой ушёл запрос на сервер, копируешь его, правишь как надо (меняешь id) и шлёшь этот запрос уже без участия исходной страницы.
Как видишь, твой метод не решает проблему, так что задавать вопрос нужно не о том, как заблокировать поле, а о том, как не дать удалить то, что удалять запрещено.
Ты не с той стороны решаешь задачу. Нужно не запрещать пользователю что-то делать у себя в браузере (не запретишь), а на сервере при добавлении проверять права на изменение чего-либо.
Можно, конечно, при открытии страницы считать значение этого поля в переменную, видимость переменной сделать не глобальной, а потом через setInterval вписывать это значение обратно. Но здесь всё будет зависеть от удачи. К тому же, если кто-то хочет что-то поменять или удалить, он не пользуется оригинальной страницей и не меняет значения на ней, он просто шлёт запрос на сервере через curl, подставляя туда то, что нужно. И тогда делай на странице что хочешь, это не помешает.
Если не понятно, то процесс такой: открываешь вкладку network, редактируешь/удаляешь что нужно, смотришь, какой ушёл запрос на сервер, копируешь его, правишь как надо (меняешь id) и шлёшь этот запрос уже без участия исходной страницы.
Как видишь, твой метод не решает проблему, так что задавать вопрос нужно не о том, как заблокировать поле, а о том, как не дать удалить то, что удалять запрещено.
По-моему такого способа запретить менять значение input. Если сайт получает ID из скрытой формы методом GET или POST, то по-любому его можно подделать.
Можно записывать в input хэш-значение ID и проверять его в php-коде. Думаю это самый надежный способ.
По моему опыту мало кто лазит в консоли и меняет ID, чтобы связать комментарий с другой статьей. Ни одного случая пока не было. Больше всего напрягает спам, но это отдельная тема )
Можно записывать в input хэш-значение ID и проверять его в php-коде. Думаю это самый надежный способ.
По моему опыту мало кто лазит в консоли и меняет ID, чтобы связать комментарий с другой статьей. Ни одного случая пока не было. Больше всего напрягает спам, но это отдельная тема )
Решил как то таким образом с помощью скрипта
Защита от подделки 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 секунды, подделать такое крайне сложно.
Защита от подделки 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 секунды, подделать такое крайне сложно.
Похожие вопросы
- PHP и MySQL - что лучше - сделать в таблице меньше полей, но длиннее запрос или больше полей и короче запрос?
- Вывод в браузер Hello Word!
- Почему браузер отображает сам код php а не готовый ответ "5"?
- Можно ли узнать, открыт ли сайт в браузере пользователя? можно ли задать событие при закрытии сайта (удаление cookies)?
- Нужен скрипт Казино на браузере или HTML5
- Назовите команды, которые используются для передачи данных с программы на сервере на php в программу в браузере на js.
- излучаемую генератором электромагнитных колебаний. Колебания же возникают при изменении электрического поля.
- Как сделать так, чтобы дата изменения в папке оставалась прежней, то бишь запретить изменение даты изменения?
- А как считаете вы об изменении магнитного поля Земли?
- Ну что, пока я трезвый, кто докажет мне, что пьяному запрещено ездить по полю? Где сказано?
Такая реализация норма, как считаешь?