Изменения хешированных переменных при отправке формы

Один из методов, который я использовал для предотвращения злоупотребления формой, - это добавление скрытого поля, содержащего хешированную переменную, установленную на сервере. Когда форма отправляется через 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();
}

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

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

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

Любые идеи?

Спасибо

IP-адрес можно легко изменить, особенно если они пользуются телефоном.

Iłya Bursov 26.09.2018 20:51

Идентификатор сеанса также может измениться, если они закроют браузер и вернутся.

Ibu 26.09.2018 20:56

Какого рода злоупотребления вы пытаетесь предотвратить? Простая ReCaptcha может быть тем, что вам нужно

GrumpyCrouton 26.09.2018 21:00

Вы уверены, что хотите хранить пароли в сессиях?

Funk Forty Niner 26.09.2018 21:29

ReCaptcha не подходит, так как большинство клиентов не хотят этого, и я согласен. Если вы когда-либо использовали VPN, вы бы знали, насколько неприятным может быть прохождение нескольких раундов проверок. Это не пароли, а просто имя переменной. Если они закроют браузер и вернутся, будет сгенерирован новый идентификатор сеанса.

WebDude0482 27.09.2018 14:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
42
2

Ответы 2

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

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

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

Хорошо, я добавил несколько скрытых полей в форму, чтобы проверить, действительно ли они на телефоне. Кроме того, IP-адрес в форме и IP-адрес в сценарии отправки формы. Посмотрим. Может занять несколько дней или неделю. Но я вижу, что мобильный телефон является решающим фактором. Я буду держать всех в курсе. Спасибо.

WebDude0482 27.09.2018 14:41

Быстрое обновление, на одном веб-сайте проблема была в Cloudflare. Все еще ждем на нескольких других сайтах.

WebDude0482 28.09.2018 15:51

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

Другие вопросы по теме