Есть поле, которое скрыто. При этом, помимо того, что оно скрыто, нужно, чтобы пользователь не мог его изменить даже путём изменения кода страницы. Я пытался использовать атрибут disabled="true"
, но тогда текст этого поля не передаётся в переменную $_POST
.
`<input type = "text" value = "<?php echo $_GET['id']?>" name = "id" hidden = "true" disabled="true">`
Если Вам так сильно нужно сопроводить свою страницу неизменными данными - зашифруйте их на стороне сервера и поместите в cookie. Тогда уж точно на стороне клиента (в браузере) данные никто не подменит, потому что не поймет что на что менять, и эти же данные гарантированно вернутся к Вам на сервер со следующим запросом, что позволит их расшифровать, перепроверить и утилизировать после использования. Хотя, честно говоря, не понимаю смысла такой операции.
Он хочет, допустим, поменять имя пользователя. на которого кликнул. Но он не должен никак менять его идентификатор.
Ну так и сделайте на уровне кода обработчика неизменным значение ID пользователя, кто же Вам мешает-то? Ведь это ВЫ в контроллере-обработчике производите операции изменения данных. Соответственно, ВЫ и задаете "правила игры" - что можно поменять, а что нельзя! Если Вы в контроллере не напишите $user->id = $_REQUEST['id']; $user->save();
, то ID пользователя никак не поменяется, даже если в запросе будет присутствовать новый ID пользователя.
Update
Проблема в том что можно передать id совершенно иного пользователя и обновить его, а не того кого открыли на форме изначально.
Сопроводите критичные к изменению данные хэшем или ЭЦП со стороны сервера. При попытке изменения этих данных хэш не сойдется, и Вы сразу получите признак попытки корректировки критичных данных. Хотя опять же, если пользователь имеет право корректировать данные того пользователя, ID которого он подставил, - Вам-то какая разница? Это его область ответственности. А если не имеет права корректировать данные того пользователя, ID которого он вручную поменял, - то такие вещи режутся на уровне проверки прав на выполнение операции. Опять же, если Вы эти проверки реализовали - его "обрежет". И снова вопрос: Вам-то, как разработчику, что с того? В лог попытку записали, алерт админу отправили, дальше - область ответственности админа. А админа контролировать... Захочет - "ручками" прямо в базе все поправит, и хэш вручную посчитает, посмотрев исходники скриптов.
От этого спасение только одно - личная ЭЦП каждого участника корректировки и сплошное журналирование операций, как это реализовано в банковских системах при проведении платежей. Каждый оператор имеет личный ключ ЭЦП. Каждая операция проходит минимум через двух человек: оператор вводит, контролер проверяет. В каждый момент времени на любой документ наложено одновременно 2 различных ЭЦП. И ежесуточная сверка ведомостями проведения операций + материальная и уголовная ответственность за "нескладушки".
Но я не уверен, что Ваш случай заслуживает таких организационно-технических мероприятий.
<input type = "hidden" value = "<?php echo $_GET['id']?>" name = "id">
<input type = "hidden" value = "<?php echo md5($_GET['id'].'еще что-то')?>" name = "crypt_id">
<?php
if(md5($_POST['id'].'еще что-то') == $_POST['crypt_id']){
// обрабатываем форму
}
при смене id
- отправлять AJAX на генерацию нового md5($_GET['id'].'еще что-то')
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Всем привет, хотелось бы узнать как такое реализовать:
hibernate реализует ORM, может сам создавать новые объекты и приводить типы по своему усмотрению
Среда разработки IntelijIdea, подключение к MySqlВ БД таблица с названием books уже создана, не могу понять почему выдает такую ошибку!