У меня есть простая форма, которую пользователи используют для регистрации своего адреса электронной почты для информационного бюллетеня.
Я хочу, чтобы спамеры не отправляли тысячи поддельных писем. Какой лучший способ сделать это?
Я думал об ограничении количества входов от каждого IP-адреса, скажем, до 60 в час, но потом подумал, что кто-то решил просто обмануть их IP как часть атаки.
Есть идеи?
* EDIT: Я ищу серверное решение. В этой ситуации UX важен, поэтому я не хочу использовать капчу или попросить пользователя проверить с помощью токена
Вы могли бы сделать что-то подобное,
function validEmail($email){
if (filter_var($email, FILTER_VALIDATE_EMAIL)){
list($user,$domain) = explode('@',$email);
return checkdnsrr($domain, 'MX');
}
return false;
}
он может не подбирать все поддельные письма, но я всегда проверяю их электронную почту, отправив им письмо с подтверждением по ссылке.
РЕДАКТИРОВАТЬ:
Что касается спама на форме, используйте CSRF, что должно предотвратить большинство спамов (по крайней мере, по моему опыту)
Я нашел отличную технику где-то в сетях. Я улучшил его, и теперь он доступен (с открытым исходным кодом) на www.formspammertrap.com.
Он использует некоторый javascript для замены действия формы и требует фактического "щелчка" живого пользователя.
Никаких катчей, скрытых полей и т. Д.; они могут работать временно, но обычно не работают долговременно.
Это бесплатно, и он отлично работает на любом сайте, на котором я его надел. PHP-based, но также будет работать в WordPress (а не в плагине).
Вы можете использовать negative captcha
. Идея состоит в том, чтобы иметь поле в форме, которая не видна людям, но боты будут вводить в нее значения. На стороне сервера вы можете игнорировать запросы, которые имеют значение в поле отрицательного кода.
Adavatage - это то, что обычные пользователи не видят никаких дополнительных шагов, например, вводить слова с надписью или проверять электронную почту. Недостатки в том, что этот метод работает до тех пор, пока люди не будут настраивать ботов специально для вашего сайта.
Пример отрицательного captcha. Включите это в свою форму.
<div style="position: absolute; left:-2000px;"><input type="text" name="email_name" value="" /></div>
На стороне сервера делать что-то вроде
if (params[:email_name] != "") //bot
else //not a bot
Общий подход состоит в том, чтобы добавить другое текстовое поле в form
-section. В вашей таблице стилей (а не тегом стиля!) Вы задаете свой css-свойство для display:none
, поскольку большинство спам-ботов заполняет каждый доступный input
-element, но не загружает внешние.css файлы. Когда ваш скрипт получает запрос, вы проверяете это скрытое текстовое поле - если оно пустое, у вас есть хорошие шансы, что это не спам.
Когда пользователь вводит свой адрес электронной почты в панель, запустите сценарий, который отправит им электронное письмо на указанный адрес, который содержит ссылку, когда они нажмут на ссылку, она активирует этот адрес электронной почты для информационных бюллетеней.
Вы можете использовать capthcha - который сломан и раздражает пользователей.
Я использую простой вопрос (сколько журналов имеет собака), а затем используйте ввод <input type='text' name='email2' value=''>
. Затем я делаю необходимые проверки на стороне сервера. Но одна вещь, которую я не делаю, - это сообщить человеку, что что-то не так, т.е. неверный номер, введенный в текстовое поле электронной почты2.
Во всяком случае, просто мысль.