Проверка регулярных выражений для предотвращения регистрации спама?

#php #regex #html #validation

#php #регулярное выражение #HTML #проверка

Вопрос:

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

Вот мой код:

         <label>Type "Word" in the field*</label>
        <input  pattern="(Word|word)" type="text" name="antispamfield"
        id="antispamfield" required/>
  

Теперь пользователю нужно будет ввести «word», чтобы завершить регистрацию. Но проходит ли проверка спама? У кого-нибудь есть идея получше, чем использовать регулярные выражения или javascript?

Комментарии:

1. учитывая, что вы предоставили ответ на вопрос прямо в самом теге ввода, это не будет большим ограничением…

2. Да, но это на случай, если мой сайт специально предназначен. Верно? @MarcB

3. Вам нужно использовать правильную КАПЧУ, такую как Google reCAPTCHA, чтобы быть относительно свободным от спама. Однако с вашей стороны требуется немного кода. Ваш метод, вероятно, предотвратит попадание спама.

4. Может быть, вы могли бы создать электронное письмо со ссылкой для регистрации, которую пользователь должен нажать, чтобы активировать свою учетную запись, как это делают некоторые крупные компании. Их тоже должно быть достаточно, чтобы пропустить это (возможно, отсканировав такое электронное письмо и щелкнув ссылку, содержащую ссылку).

5. @HaukurHaf Я не хочу использовать captcha.

Ответ №1:

Может ли спамер пройти проверку?

Да. Легко.

Если браузер может прочитать «секретное слово» (и, очевидно, может), то спамер может его прочитать: оно явно присутствует в его curl (или эквивалентном) выводе.

Поэтому он может настроить свой скрипт, чтобы прочитать слово в <label>Type "Word"</label> поле и автоматически ввести его в antispamfield поле ввода текста.

Другие идеи

Существует много подходов для защиты от спамеров форм. Ни один из них не идеален. Некоторые из них:

  1. Токен, сохраненный в сеансе перед отправкой. Если вы получаете отправку без правильного токена, это более чем подозрительно.
  2. Контроль количества комментариев на IP-адрес за период времени.
  3. Требуется, чтобы пользователь зарегистрировал его, прежде чем он или она сможет прокомментировать.
  4. Капча, такая как reCAPTCHA
  5. Are you Human? проблемы

Для некоторых из них требуется база данных.

Комментарии:

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

2. @MinaIsaac По памяти, я думаю, Крис Шифферт описывает это в своей книге по безопасности PHP. По сути, вы помещаете токен в форму в качестве скрытого поля ввода, а затем проверяете его в данных POST и сравниваете с тем, который хранится в сеансе. Что касается формулы для генерации токена… Это не имеет большого значения, подойдет даже случайный int, потому что, если парень продолжит попытки, ваша защита от наводнений поймает его. При этом, если вы выполните поиск «сгенерировать уникальный токен для формы», у вас могут появиться другие идеи. 🙂

Ответ №2:

Вы можете использовать CAPTCHA (http://www.captcha.net /) в вашей проверке. Я думаю, что это намного надежнее, чем у вас. Кроме того, просто примечание: вы можете включить «WORD» в свой шаблон, поскольку некоторые люди вводят все заглавные буквы для такой проверки.

Комментарии:

1. Хороший момент, я тоже должен добавить WORD, спасибо за это. Я не хочу использовать какую-либо капчу

Ответ №3:

Я бы использовал какой-нибудь текстовый вопрос, который трудно угадать большинству роботов, например «Кто был вторым президентом США?» и проверял ответ с помощью серверного скрипта при отправке формы.