#php #forms #security
#php #формы #Безопасность
Вопрос:
Допустим, у вас есть форма. И вы не хотите, чтобы на нем были уродливые captcha, если это не является абсолютно необходимым.
Таким образом, вы позволяете пользователю отправлять форму, и если тот же пользователь отправляет форму снова, покажите captcha или что-то еще.
Можно ли определить, поступает ли отправка 2-й формы от того же пользователя?
Я знаю о $_SERVER['REMOTE_ATTR']
(который является IP-адресом пользователя), но надежно ли это? Поскольку эта переменная хранит значение, отправленное пользователем, я думаю, любой бот может подделать это, верно?
Комментарии:
1. Почему бы не использовать сеансы / файлы cookie? «Обнаружение» конкретного пользователя или браузера всегда будет по своей сути ошибочным с использованием данных, отправляемых браузером.
2.
$_SERVER['REMOTE_ATTR']
не отправляется браузером. Это адрес, на который ваш веб-сервер адресует HTTP-пакеты. К сожалению, он не может работать как идентификатор для вас, потому что многие пользователи могут быть скрыты за 1 IP-адресом через NAT (плюс другие недостатки). Вам придется придерживаться сеансовых файлов cookie.3. На самом деле я не думаю, что сеансы / файлы cookie помогут, потому что, скорее всего, спам-боты не будут сохранять и отправлять ваши файлы cookie обратно, чтобы они могли отправлять их столько раз, сколько захотят.
Ответ №1:
Вы можете пройти 2 маршрута. Вы можете либо использовать переходящий токен csrf, либо сохранить флаг в сеансе. Флаг сеанса немного более понятен:
session_start();
if(!isset($_SESSION['submit_flag'])){
$_SESSION['submit_flag']=true
//perform action...
}