php. Проверка данных с использованием хешей
Данный материал предоставлен сайтом
PacificSky.Ru исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Представим ситуацию, что вам необходимо отдать какую то информацию пользователю и при получении ответа ответа от пользователя, вы должны получить данные или куки и при этом убедиться в правильности полученной информации. Не было ли со стороны пользователя подмены ответа с отправленными данными.
Пример:
Для демонстрации, приведу простейший пример того, как можно добиться защиты от подмены данных, полученных от пользователя.
Для решения данной проблемы нам поможет функция hash_hmac(). С помощью данной функции мы можем сгенерировать и отдавать hash для возвращаемых данных.
Пользователь, при совершении каких то действий, должен будет передать вам ответ и проверочный hash, по которому вы можете сверить полученный ответ.
Воспользуемся функцией hash_hmac().
Выбираем алгоритм шифрования sha1.
Задаем общий секретный ключ/соль "test_salt" (Можно заменить на свой).
И шифруем данные.
Распечатаем и выведем данные и секретный ключ:
Теперь при клике на кнопку, форма отправит на сервер данные с ответом и секретный ключ, который вам нужно будет проверить.
В случае удачи код отобразит полученный ответ. А в случае неудачи мы получим ошибку.
Проверяем полученные данные:
Результат:
Весь код из примера:
Пример:
Для демонстрации, приведу простейший пример того, как можно добиться защиты от подмены данных, полученных от пользователя.
Для решения данной проблемы нам поможет функция hash_hmac(). С помощью данной функции мы можем сгенерировать и отдавать hash для возвращаемых данных.
Пользователь, при совершении каких то действий, должен будет передать вам ответ и проверочный hash, по которому вы можете сверить полученный ответ.
Воспользуемся функцией hash_hmac().
Выбираем алгоритм шифрования sha1.
Задаем общий секретный ключ/соль "test_salt" (Можно заменить на свой).
И шифруем данные.
$salt = 'test_salt';
$answer = 3;
$hash = hash_hmac('sha1', $answer, $salt);
Распечатаем и выведем данные и секретный ключ:
echo '<form method="post">';
echo '<input type="text" name="answer" value="' . $answer . '"/>';
echo '<input type="hidden" name="hash" value="' . $hash . '"/>';
echo '<button type="submit">send</button>';
echo '</form>';
Теперь при клике на кнопку, форма отправит на сервер данные с ответом и секретный ключ, который вам нужно будет проверить.
В случае удачи код отобразит полученный ответ. А в случае неудачи мы получим ошибку.
Проверяем полученные данные:
if (!empty($_POST)) {
$answer = $_POST['answer'];
$hash = $_POST['hash'];
$verificationHash = hash_hmac('sha1', $answer, $salt);
if ($verificationHash === $hash) {
echo 'answer: ' . $answer;
} else {
echo 'fail!';
}
}
Результат:
Весь код из примера:
По аналогии из представленного выше кода, данные можно получать и записывать в cookie.
Далее данные из cookie проверяются по хешу.
Далее данные из cookie проверяются по хешу.
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.