Как передать методом текст поля формы?

179
31 июля 2021, 23:30

Есть поле, которое скрыто. При этом, помимо того, что оно скрыто, нужно, чтобы пользователь не мог его изменить даже путём изменения кода страницы. Я пытался использовать атрибут disabled="true", но тогда текст этого поля не передаётся в переменную $_POST.

`<input type = "text" value = "<?php echo $_GET['id']?>"  name = "id" hidden = "true" disabled="true">`
Answer 1

Если Вам так сильно нужно сопроводить свою страницу неизменными данными - зашифруйте их на стороне сервера и поместите в cookie. Тогда уж точно на стороне клиента (в браузере) данные никто не подменит, потому что не поймет что на что менять, и эти же данные гарантированно вернутся к Вам на сервер со следующим запросом, что позволит их расшифровать, перепроверить и утилизировать после использования. Хотя, честно говоря, не понимаю смысла такой операции.

Он хочет, допустим, поменять имя пользователя. на которого кликнул. Но он не должен никак менять его идентификатор.

Ну так и сделайте на уровне кода обработчика неизменным значение ID пользователя, кто же Вам мешает-то? Ведь это ВЫ в контроллере-обработчике производите операции изменения данных. Соответственно, ВЫ и задаете "правила игры" - что можно поменять, а что нельзя! Если Вы в контроллере не напишите $user->id = $_REQUEST['id']; $user->save();, то ID пользователя никак не поменяется, даже если в запросе будет присутствовать новый ID пользователя.

Update

Проблема в том что можно передать id совершенно иного пользователя и обновить его, а не того кого открыли на форме изначально.

Сопроводите критичные к изменению данные хэшем или ЭЦП со стороны сервера. При попытке изменения этих данных хэш не сойдется, и Вы сразу получите признак попытки корректировки критичных данных. Хотя опять же, если пользователь имеет право корректировать данные того пользователя, ID которого он подставил, - Вам-то какая разница? Это его область ответственности. А если не имеет права корректировать данные того пользователя, ID которого он вручную поменял, - то такие вещи режутся на уровне проверки прав на выполнение операции. Опять же, если Вы эти проверки реализовали - его "обрежет". И снова вопрос: Вам-то, как разработчику, что с того? В лог попытку записали, алерт админу отправили, дальше - область ответственности админа. А админа контролировать... Захочет - "ручками" прямо в базе все поправит, и хэш вручную посчитает, посмотрев исходники скриптов.

От этого спасение только одно - личная ЭЦП каждого участника корректировки и сплошное журналирование операций, как это реализовано в банковских системах при проведении платежей. Каждый оператор имеет личный ключ ЭЦП. Каждая операция проходит минимум через двух человек: оператор вводит, контролер проверяет. В каждый момент времени на любой документ наложено одновременно 2 различных ЭЦП. И ежесуточная сверка ведомостями проведения операций + материальная и уголовная ответственность за "нескладушки".

Но я не уверен, что Ваш случай заслуживает таких организационно-технических мероприятий.

Answer 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'].'еще что-то')

READ ALSO
Работа с date() и cookies

Работа с date() и cookies

Есть Current date: 09/20/2019 05:48 и Data end: 09/21/2019 00:25

112
замена строки с неизвесными символами | php

замена строки с неизвесными символами | php

Всем привет, хотелось бы узнать как такое реализовать:

110
Нарушает ли hibernate принцип инкапсуляции

Нарушает ли hibernate принцип инкапсуляции

hibernate реализует ORM, может сам создавать новые объекты и приводить типы по своему усмотрению

142
Unknown table при работе с таблицами в БД

Unknown table при работе с таблицами в БД

Среда разработки IntelijIdea, подключение к MySqlВ БД таблица с названием books уже создана, не могу понять почему выдает такую ошибку!

133