PHP – замена Captcha

Мне нужно ваше мнение по этому коде для внедрения антиспамового решения:

  • Когда создается страница / форма, создается случайная строка, например. как $string = md5($_SERVER['REMOTE_ADDR'])
  • эта строка вставляется в базу данных и истекает, скажем, через 2 часа, поэтому мы не заполняем базу данных
  • При загрузке страницы форма имеет скрытое поле ввода без значения, spam_check его spam_check
  • Через 10, 15 или 20 секунд после загрузки страницы запрос AJAX автоматически срабатывает, чтобы spam_check извлечь эту $string из значения db & fill out spam_check с ним.
  • когда форма отправляется, мы выполняем простую проверку между $string from db и $_POST['spam_check'] , если они не соответствуют сообщению, это спам …

Это хорошая идея? Насколько это безопасно? Очевидным преимуществом является то, что он не требует каких-либо действий от посетителя, например, чтение captcha и т. Д.

Интересно. Я бы с осторожностью подумал об этом как о решении спама / замены кача, но это затрудняет жизнь спамеров.

Однако вам следует планировать рассмотрение случаев, когда javascript отключен (и, возможно, CSS тоже) – например, назначив div для формы, но оставив его с сообщением по умолчанию, а затем записав в него форму с помощью javascript (встроенный, а не ожидающий OnLoad / pageready).

$ string = md5 ($ _ SERVER ['REMOTE_ADDR'])

Это не случайное значение – и оно не изменится. Рассматривать:

$ string = sha1 ($ _ SERVER ['REMOTE_ADDR']. rand (1000) .time ());

(sha1 немного быстрее, чем md5, несмотря на лежащий в основе алгоритм, требующий больше операций).

Было бы неплохо использовать сеанс и:

$ _SERVER ['string'] = sha1 (session_id (). Rand (1000) .time ());

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

Один из подходов, который мне очень нравится, – это использовать CSS, чтобы скрыть элемент <input type="text"> . Бот не знал бы, скрыт он или нет, и обычный пользователь никогда его не увидит.

Взгляните на этот пост, где эта тема уже широко обсуждается. Практические подходы CAPTCHA, основанные на изображениях.

В любом случае, учитывая ваш реальный вопрос is this a good idea? , Я не могу придумать, почему это не сработает … Я думаю, что часть базы данных не нужна, но есть другие способы, как вы можете видеть по предыдущей ссылке …