PHP временно блокирует IP - PullRequest
1 голос
/ 09 июля 2009

Я создаю контактную форму для своей компании и хочу сделать ее максимально защищенной от спама. Я создал медовый горшок + проверку сеанса, но я также хочу сделать так, чтобы отправлять форму можно было только раз в x минут. Другими словами, запрет на использование IP формы на х время.

Как лучше всего это сделать?

Я могу думать о некоторых, но ни один из них не кажется идеальным.

Ответы [ 6 ]

5 голосов
/ 09 июля 2009

Храните IP пользователей в базе данных каждый раз при отправке формы вместе с отметкой времени. Когда пользователь отправляет форму, сначала проверьте базу данных, чтобы увидеть, если они отправили в течение срока.

Некоторые проблемы могут возникнуть в больших сетях, где пользователи могут использовать один и тот же IP-адрес. Это действительно зависит от целевой аудитории.

2 голосов
/ 09 июля 2009

База данных. Сохраните там IP-адреса и отметьте их время.

0 голосов
/ 11 июля 2009

Также не мешало бы иметь какой-нибудь cron-скрипт (или, по крайней мере, инструмент, написанный и находящийся в режиме ожидания), готовый убрать беспорядок, который все-таки удается преодолеть. Для моего сайта я пишу один, чтобы пометить абсолютно идентичные представления от нескольких ips в течение очень маленького промежутка времени (в течение 10 секунд).

По крайней мере, вы можете написать несколько запросов, чтобы показать сомнительное представление в форме комментария.

0 голосов
/ 09 июля 2009

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

0 голосов
/ 09 июля 2009

Если вы не возражаете ограничить форму браузерами с поддержкой cookie (исключая некоторых «браузеров», то есть ботов, я полагаю), вы можете сделать что-то вроде этого:

Страница формы загружается, она проверяет переменную сеанса с отметкой времени. Если ничего не найдено, он создает его и перенаправляет на ту же страницу, но с параметром GET, указывающим «action = start» или что-то в этом роде. Поэтому при второй загрузке, если вы видите $ _GET ['action'] == 'start', вы можете проверить эту переменную сеанса. Если вы его не найдете, вы можете перенаправить его в другое место, сказав, что файлы cookie необходимы.

Теперь вы можете проверить отметку времени и сделать что-нибудь еще, если это было слишком рано.

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

0 голосов
/ 09 июля 2009

Хороший подход, который я видел в некоторых блогах, заключается в использовании JavaScript для защиты от ботов. Как и в событии onsubmit (), измените метод формы с GET на POST. Вы можете сделать другую магию тоже. Боты плохо умеют выполнять JavaScript, поэтому вы можете использовать это в своих интересах.

С другой стороны - это может повредить 0,0000001% пользователей, у которых не включен JavaScript. Ну, твой выбор действительно. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...