Учитывая приведенный ниже пример: HTML-страница:
<input type="text" name="update_12" />
Поле ввода с именем «update_12» и новый текст: «Некоторые другие данные» отправляются через форму на серверный PHP-скрипт (скажем, process.php)
Формат базы данных:
===================== message_ID Message ===================== 12 Some data 13 Another data
Если PHP-скрипт взорвется на имени ввода как:
foreach ($_POST as $key => $value) { if(strstr($key, "update_")){ $required_id = explode('_',$key)[1]; $query = "UPDATE <db_name> SET `Message`='".$_POST[$key]."' WHERE `message_id`='".$required_id."'"; } }
Это обновляет БД новым сообщением для message_ID: 12
Я новичок в PHP и изучал базовое хранилище данных, обновление, извлечение и удаление в MySQL.
Поскольку клиент может изменить имя поля ввода: «имя» и отправить другое значение для обновления. Например: если клиент открывает firebug и изменяет поле «имя» поля ввода на «update_13», его операция будет перезаписывать сообщение другого пользователя.
Я попытался изучить это, попробовав удаление статуса в facebook. От первичного наблюдения за POST-данными для удаления я мог видеть, что некоторые важные параметры отправляются для удаления как:
impression_id=456ab622 profile_id=100005552221116 __user=100005552221116 story_fbid=540912345678911
Для удаления почты ассоциированный идентификатор выглядит так: story_fbid. Когда я изменил это, это может быть: 540912345678912 (последняя цифра изменена). И нажал на delete, fb требует времени и отвечает сообщением об ошибке: Эта операция не может быть выполнена. Это сообщение об ошибке появляется после отправки запроса POST для удаления (с измененной версией story_fbid). Ответ на запрос POST содержит сообщение об ошибке, которое отображается в модальном окне.
Я могу думать о способе, в котором идентификатор и его хэш (MD5 / SHA1 / SHA2) хранятся в БД и после получения идентификатора, получают хэш его и, если он соответствует любому, обновляют эту строку в БД. Однако есть вероятность, что хэш 13 (в нашем случае) может соответствовать любой другой строке и, следовательно, выполнить операцию обновления.
Можете ли вы предложить другие безопасные способы, с помощью которых мы можем проверить, что клиент не изменил значения?
Ответ на интересующий вас вопрос – именно то, что я ищу. Однако в этом обсуждении нет правильных решений / методов.