Блокирование спама комментариев без использования captcha

Каковы некоторые не-captcha методы блокировки спама в моих комментариях?

По моему опыту, в настоящее время наиболее эффективными являются поля ввода honeypot, которые становятся невидимыми для пользователей через CSS (лучше всего использовать несколько разных методов, таких как видимость: скрытая, установка размера 0 пикселей и абсолютное позиционирование далеко за пределами окна браузера); если они все равно заполнены, вы можете предположить, что это спамбот.

В этом блоге описывается довольно сложный метод, который я опробовал сам (со 100% успехами до сих пор), но я подозреваю, что вы можете получить тот же результат, пропустив все вещи с именами хэшированных полей и просто добавьте несколько простых полей honeypot.

1) Добавление связанной с сеансом информации в форму Пример:

<input type="hidden" name="sh" value="<?php echo dechex(crc32(session_id())); ?>" /> 

то при обратной передаче проверьте, действителен ли сеанс.

2) Только Javascript . Используйте Javascript-инъекцию при представлении. Пример:

 <input type="hidden" id="txtKey" name="key" value="" /> <input type="submit" value="Go" onclick="document.getElementById('txtKey').value = '<?php echo dechex(crc32(session_id())) ?>';" /> 

3) Ограничение времени на IP, пользователя или сеанса . это довольно просто.

4) Ранжирование имен полей:

 <?php $fieldkey = dechex(crc32(mt_rand().dechex(crc32(time())))); $_SESSION['fieldkey'] = $fieldkey; ?> <input type="text" name="name<?php echo $fieldkey; ?>" value="" /> <input type="text" name="address<?php echo $fieldkey; ?>" value="" /> 

Затем вы можете проверить его на стороне сервера.

У Akismet есть API. Кто-то написал класс оболочки (BSD liscense) для него по адресу: http://cesars.users.phpclasses.org/browse/package/4401.html

Существует также класс байесовского фильтра (BSD Liscense) http://cesars.users.phpclasses.org/browse/package/4236.html

Это простой трюк, чтобы блокировать спам-бот или грубую силу без использования captcha.

Поместите это в вашу форму:

 <input type="hidden" name="hash" value="<?php echo md5($secret_key.time()).','.time(); ?>" /> 

Поместите это в свой php-код

 $human_typing_time = 5;/** page load (1s) + submit (1s) + typing time (3s) */ $vars = explode(',', $_POST['hash']); if(md5($secret_key.$vars[1]) != $vars[0] || time() < $var[1] + $human_typing_time){ //bot? exit(); } 

В зависимости от веса формы вы можете увеличить или уменьшить $ man_typing_time.

Фильтры Naive Beyesian, конечно же:

http://blog.liip.ch/archive/2005/03/30/php-naive-bayesian-filter.html

Существует также Теория Медового Пота. Мне очень нравится использовать медовые горшки с другими формами спама для достижения наилучших результатов.

http://www.projecthoneypot.org/

Другой общий подход – дать пользователю простой вопрос («огонь горячий или холодный?» «Что такое 2 плюс 7?» И т. Д.). Это немного похоже на капчу, но он более доступен для пользователей с нарушениями зрения с использованием программ чтения с экрана. Я думаю, что должен быть плагин WordPress, который делает это, потому что я вижу это очень часто в блогах WordPress.

Sblam! является фильтром с открытым исходным кодом, аналогичным Akismet.

Он использует наивную байесовскую фильтрацию, проверяет IP-адрес отправителя и ссылки в нескольких распределенных черных списках, проверяет правильность HTTP-запросов и использует присутствие JS как подсказку (но не требование).

Регулярные CAPTCHA теперь могут быть разрешены спамом.

Вместо этого рассмотрим «текст CAPTCHA» : логический или общеизвестный вопрос, например «Что такое 1 + 1?» или «Какого цвета белый конь? Вопрос может быть даже статическим (тот же вопрос для каждой попытки).

Текстовая логика CAPTCHA

(Taken from http://matthewhutchinson.net/2010/4/21/actsastextcaptcha )

Я думаю, что Джефф Этвуд даже использует такую ​​проверку в своем блоге. (Поправьте меня если я ошибаюсь)

Некоторые ресурсы:

Вы могли бы попытаться использовать третью сторону, такую ​​как Akismet . Ключи API бесплатны для личного использования. Кроме того, у Zend Framework есть пакет для этого.

Большинство ботов просто заполняют всю форму и отправляют ее вам. Простым трюком, который работает, является создание нормального поля, которое вы обычно скрываете с помощью javascript. На стороне сервера просто проверьте, заполнено ли это поле. Если это так, значит, это спам.

Поскольку многие люди уже предлагали: используйте поле ввода медового горшка. Но есть еще две вещи, которые вам нужно сделать. Сначала рандомизируйте имя / идентификатор, поле ввода которого является медовым горшком. Храните состояние полезных полей в сеансе (а также токен формы, используемый против атак CSRF). Например, у вас есть следующие поля: имя, адрес электронной почты, сообщение. В вашей форме у вас будет «токен», который является вашим токеном, «jzefkl46», который является именем для этой формы, «ofdizhae» для электронной почты «45sd4s2» для сообщения и «fgdfg5qsd4» для медового банка. В сеансе пользователя вы можете иметь что-то вроде

 array ("forms" => array ("your-токен-значение" => массив ("jzefkl46" => "name",
                                                    "ofdizhae" => "email",
                                                    «45sd4s2» => «сообщение»,
                                                    «fgdfg5qsd4» => мед »)); 

Вам просто нужно повторно связать его, когда вы получите данные формы.

Во-вторых, поскольку у робота есть много шансов избежать поля вашего медового горшка (25% шансов), умножьте количество горшков. С 10 или 20 из них вы добавляете трудности ботам, не имея слишком больших накладных расходов в своем html.

Запретить ссылки. Без ссылок спам бесполезен.

[EDIT] Как средние пути, разрешайте ссылки только на «хорошие» сайты (обычно ваши собственные). Их всего лишь несколько, поэтому вы можете либо добавить их по просьбе своих пользователей, либо оставить комментарий, пока не проверите ссылку. Когда это будет хорошо, добавьте его.

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

Я сократил около 99% спама на своем веб-сайте с помощью простого математического вопроса, такого как:

Что такое 2 + 4 [TextBox]

Пользователь может отправить вопрос / комментарий, если они ответят «6».

Работает для меня и аналогичного решения для Джеффа Этвуда из Coding Horror!

В моем блоге у меня есть своего рода компромиссный код: я использую только код, если сообщение содержит ссылку. Я также использую поле ввода honeypot. До сих пор это было почти на 100% эффективным. Время от времени появляется спамер, который отправляет что-то в каждую форму, которая не содержит ссылок (обычно что-то вроде «хороший сайт!»). Я могу только предположить, что эти люди думают, что я пошлю их по электронной почте, чтобы узнать, кто они (используя адрес электронной почты, который только я вижу).

наряду с использованием полей медового банка, мы можем автоматически запретить IP-адрес (который не работает для динамических IP-адресов) и особенно любые ссылки, отправленные ботами.

Akismet – хорошая альтернатива, они проверяют ваши сообщения на спам и работают очень эффективно. Вам просто нужно загрузить их librabry. http://akismet.com/development/

проверить некоторые плагины для антиспама wp для примеров и идей

есть много приятных антиспамов без использования captcha.

некоторые я бы порекомендовал: hashcash, nospamnx, антиспам типа клавиатуры. все это с использованием разных методов, блокирующих спам, и я использую их все. hashcash + nospamnx блокирует почти все спамботы. и антиспам блокировки клавиатуры блокируют большинство человеческих типизированных спама.

они также хорошие: спамкам, wp-spamfree, anti-captcha, плохое поведение, httpbl и т. д.

также с простым .htaccess, который блокирует любой бот прямой POST, который не приходит с вашего собственного сайта (проверьте референт)

или просто передайте свою систему комментариев на произвол судьбы и спать.