Один из методов, который я использовал для предотвращения злоупотребления формой, - это добавление скрытого поля, содержащего хешированную переменную, установленную на сервере. Когда форма отправляется через 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-адреса между доставкой формы и отправкой формы?
Любые идеи?
Спасибо
Идентификатор сеанса также может измениться, если они закроют браузер и вернутся.
Какого рода злоупотребления вы пытаетесь предотвратить? Простая ReCaptcha может быть тем, что вам нужно
Вы уверены, что хотите хранить пароли в сессиях?
ReCaptcha не подходит, так как большинство клиентов не хотят этого, и я согласен. Если вы когда-либо использовали VPN, вы бы знали, насколько неприятным может быть прохождение нескольких раундов проверок. Это не пароли, а просто имя переменной. Если они закроют браузер и вернутся, будет сгенерирован новый идентификатор сеанса.






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