Запретить спамерам публиковать сообщения на сайте для форм, не защищенных идентификатором входа в систему

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

В бэкенде я проверяю ключ формы, а также проверяю значения по некоторым функциям выбора слов, а также говорю, если isset($_POST). Я все еще продолжаю получать спам довольно сильно и не знаю, как я могу избежать этого. Кроме того, чтобы заставить людей регистрироваться на сайте, как я могу предотвратить весь спам? Любые дополнительные предложения приветствуются!


person user1048676    schedule 05.01.2012    source источник


Ответы (4)


  1. Используйте лучшую капчу, такую ​​как Re-Captcha от Google.
  2. Создайте поле с медовым горшком, которое вы скроете с помощью CSS. Боты обычно заполняют все поля, поэтому, если это скрытое поле заполнено, вы знаете, что это бот.
person dqhendricks    schedule 05.01.2012
comment
Ооо, мне тоже нравится идея с полем для медовых горшков. Никогда бы не подумал об этом. - person James; 06.01.2012
comment
@dqhendricks В качестве дополнительной информации, я все еще получал спам-сообщения, поэтому я решил поместить CSS в jQuery и таким образом скрыть поле формы. Я отчитаюсь и посмотрю, будет ли это более успешным. - person user1048676; 06.01.2012
comment
@user1048676 user1048676 вы отклоняете запросы, в которых это поле заполнено, верно? Кроме того, вам действительно нужна повторная капча прежде всего. - person dqhendricks; 06.01.2012
comment
@dqhendricks Я уверен, что я включил пустой ($_POST['lamecaptcha']) в мою логику if, когда нужно обрабатывать форму. У меня тоже была reCaptcha, и она все еще рассылала спам. Ничего не произошло после того, как я добавил CSS для этой скрытой формы в свой jQuery. - person user1048676; 07.01.2012
comment
@user1048676 user1048676, если повторная проверка не останавливает их, вы делаете что-то серьезно неправильно при проверке ввода или это спам-рассылка. - person dqhendricks; 07.01.2012

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

person Christofer Eliasson    schedule 05.01.2012
comment
Спасибо, я тоже добавлю это в свой список проверок. - person user1048676; 06.01.2012

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

http://aknosis.com/2009/04/17/zero-user-interaction-captcha/

person aknosis    schedule 05.01.2012

Поставьте на него рекапчу. http://www.google.com/recaptcha

person James    schedule 05.01.2012
comment
Пользователь уже использует математическую CAPTCHA, поэтому я не знаю, почему recaptcha лучше. - person j08691; 06.01.2012
comment
Спасибо, но почему рекапча лучше, чем математический вопрос? Могут ли роботы прочитать скрытое поле и ввести это значение в поле формы? Я думал, что математическая задача и рекапча показывают, что это человек, входящий в форму. - person user1048676; 06.01.2012
comment
Потому что роботы могут читать текст. Кроме того, если он сохраняет окончательное математическое значение в скрытом поле и отправляет его с формой, роботам нужно только очистить страницу для этого имени скрытого поля и извлечь из него значение. Чтобы робот знал, что вводить в качестве ответа. - person James; 06.01.2012
comment
Да, роботы могут прочитать все, что вы вводите в браузер, включая скрытые поля. - person j08691; 06.01.2012
comment
@ user1048676 Да. Извините, вы спросили, пока я отвечал на j08691. - person James; 06.01.2012
comment
Если бы я проверил и ответил с помощью ajax вместо того, чтобы помещать его в скрытое поле, это также сработало бы, чтобы ответ размещался снаружи? - person user1048676; 06.01.2012
comment
@user1048676 user1048676 Что ж, если бы вы сохранили свои значения непосредственно в самом коде скрипта, это помогло бы. Но вам все равно придется отображать их на странице. Я не знаю, сколько видят боты-скрипты или что-то в этом роде, но размещение значений в нужных местах после загрузки страницы определенно помогло бы. Итак, если у вас не было скрытого поля, используйте jquery или javascript, чтобы поместить математические числа в их теги span (или что-то еще, в чем они находятся), затем используйте jquery/javascript, чтобы получить все значения поля и обработать их с помощью ajax, включая математические числа, это определенно усложнило бы задачу для бота. - person James; 06.01.2012