Как предотвратить спам в форме [дубликата]

0

У меня есть простая форма, которую пользователи используют для регистрации своего адреса электронной почты для информационного бюллетеня.

Я хочу, чтобы спамеры не отправляли тысячи поддельных писем. Какой лучший способ сделать это?

Я думал об ограничении количества входов от каждого IP-адреса, скажем, до 60 в час, но потом подумал, что кто-то решил просто обмануть их IP как часть атаки.

Есть идеи?

* EDIT: Я ищу серверное решение. В этой ситуации UX важен, поэтому я не хочу использовать капчу или попросить пользователя проверить с помощью токена

Теги:
forms
spam-prevention

6 ответов

0
Лучший ответ

Вы могли бы сделать что-то подобное,

function validEmail($email){
    if (filter_var($email, FILTER_VALIDATE_EMAIL)){
        list($user,$domain) = explode('@',$email);
        return checkdnsrr($domain, 'MX');
    } 
    return false;
}

он может не подбирать все поддельные письма, но я всегда проверяю их электронную почту, отправив им письмо с подтверждением по ссылке.

РЕДАКТИРОВАТЬ:

Что касается спама на форме, используйте CSRF, что должно предотвратить большинство спамов (по крайней мере, по моему опыту)

  • 0
    Спасибо, два быстрых вопроса: что делает ваш скрипт (он просматривает записи DNS?) И что такое CSRF?
  • 0
    @ alias51 Привет, поэтому сначала проверяет электронную почту, чтобы убедиться, что она выглядит правильно, а затем разбивает ее на имя пользователя и домен. Например, Aaran | Google.com, затем проверяет настройки Googles DNS для почтового сервера и возвращает истину или ложь на основе результатов ... CSRF - это произвольная строка, помещаемая в сеанс, которая меняет каждую страницу, которую вы посещаете, после чего у вас есть скрытое поле на вашем форум и проверьте его при отправке, таким образом, спам-бот должен сначала получить эту строку перед отправкой формы.
Показать ещё 2 комментария
1

Я нашел отличную технику где-то в сетях. Я улучшил его, и теперь он доступен (с открытым исходным кодом) на www.formspammertrap.com.

Он использует некоторый javascript для замены действия формы и требует фактического "щелчка" живого пользователя.

Никаких катчей, скрытых полей и т. Д.; они могут работать временно, но обычно не работают долговременно.

Это бесплатно, и он отлично работает на любом сайте, на котором я его надел. PHP-based, но также будет работать в WordPress (а не в плагине).

1

Вы можете использовать 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
0

Общий подход состоит в том, чтобы добавить другое текстовое поле в form -section. В вашей таблице стилей (а не тегом стиля!) Вы задаете свой css-свойство для display:none, поскольку большинство спам-ботов заполняет каждый доступный input -element, но не загружает внешние.css файлы. Когда ваш скрипт получает запрос, вы проверяете это скрытое текстовое поле - если оно пустое, у вас есть хорошие шансы, что это не спам.

0

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

0

Вы можете использовать capthcha - который сломан и раздражает пользователей.

Я использую простой вопрос (сколько журналов имеет собака), а затем используйте ввод <input type='text' name='email2' value=''>. Затем я делаю необходимые проверки на стороне сервера. Но одна вещь, которую я не делаю, - это сообщить человеку, что что-то не так, т.е. неверный номер, введенный в текстовое поле электронной почты2.

Во всяком случае, просто мысль.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню