Хэшированные переменные при отправке формы - PullRequest
0 голосов
/ 26 сентября 2018

Один из методов, который я использовал для предотвращения злоупотребления формой, - это добавление скрытого поля, содержащего хеш-переменную, установленную на сервере.Когда форма отправляется через AJAX в PHP-скрипт, она сравнивает значение POST со значением, сгенерированным значением SESSION.

Во включаемом файле в начале всех страниц мне нужно сгенерировать хеш

$hashed_password = crypt($_SERVER['REMOTE_ADDR'],session_id());
$_SESSION['hashed_password'] = $hashed_password;

Форма отправляется через AJAX, и код там есть;

    if ($_SESSION['hashed_password'] !== $_POST['thisname']) {
    // do stuff like show a message, record to a log, etc
    die();
}

Примечание: это имя - имя скрытого поля в форме.

Это прекрасно работает99,9% времени.Но иногда они не совпадают.Не спамеры, а постоянные клиенты.Кажется, в основном на Chrome.

Я не понимаю, как это может быть.Изменение в их IP-адресе между доставкой формы и отправкой формы?

Есть идеи?

Спасибо

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Пользователи могут открывать ваше приложение на нескольких вкладках.Если у вас всегда есть один и только один хеш в сеансе, вероятно, они отправят с ранее действительным хешем, который не будет совпадать с текущим в сеансе.Я справляюсь с этим, сохраняя массив сгенерированных хэшей в сеансе, каждый с временной меткой, и истекаю их через некоторый период времени.

0 голосов
/ 26 сентября 2018

Мобильные клиенты часто меняют свои IP-адреса.

Протокол http не имеет состояния.Нет никакой гарантии, что любые два запроса связаны друг с другом.

С другой стороны, вы можете легко получать совершенно не связанные запросы с одного IP.

...