Блокирование спама комментария, не используя [закрытую] капчу

Большинство тестов ничего не тестирует.
Вы пишете fileopen () функция и unittest, который перестал работать, если файл не существует и успешно выполняется, если файл действительно существует.Отлично! Теперь Вы проверяли, работает ли это с именем файла в китайцах BIG5? на доле NFS? на перспективе с файлом на флеш-карте и включенном контроле учётных записей?

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

Модульные тесты проверяют ошибки в коде отдельных функций. Они могут работать на уровни доступа к данным, библиотеки математики и т.д., где исходные данные/выводы известны, и внутренняя структура сложна, но для большого количества случаев они - просто пустая трата времени.
Они перестали работать, когда ошибки происходят из-за взаимодействий между различными частями кода или с ОС и пользователем. Проблемы как высокие/низкие настройки DPI, портящие диалоговое окно или установку иностранного языка, подкачивающую a'.' и'', обычно не находятся.

50
задан Kip 16 October 2009 в 02:23
поделиться

16 ответов

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

0
ответ дан 7 November 2019 в 10:44
поделиться

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

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

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

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

1
ответ дан 7 November 2019 в 10:44
поделиться

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

0
ответ дан 7 November 2019 в 10:44
поделиться

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

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

61
ответ дан 7 November 2019 в 10:44
поделиться

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

1
ответ дан 7 November 2019 в 10:44
поделиться

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

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

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

1
ответ дан 7 November 2019 в 10:44
поделиться

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

0
ответ дан 7 November 2019 в 10:44
поделиться

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

1
ответ дан 7 November 2019 в 10:44
поделиться

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

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

9
ответ дан 7 November 2019 в 10:44
поделиться

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="" />   

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

14
ответ дан 7 November 2019 в 10:44
поделиться

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

array("forms" => array("your-token-value" => array("jzefkl46" => "name",
                                                   "ofdizhae" => "email",
                                                   "45sd4s2" => "message",
                                                   "fgdfg5qsd4" => honey"));

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

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

2
ответ дан 7 November 2019 в 10:44
поделиться

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

3
ответ дан 7 November 2019 в 10:44
поделиться

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

http://www.projecthoneypot.org/

5
ответ дан 7 November 2019 в 10:44
поделиться

Конечно, наивные беесовские фильтры:

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

4
ответ дан 7 November 2019 в 10:44
поделиться

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

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

некоторые я бы порекомендовал: hashcash, nospamnx, антиспам с клавиатуры. all these using different methods blocking spam and i use them all. hashcash+nospamnx block almost all spambot. and typepad antispam block most human typed spam.

these are also good ones: spambam, wp-spamfree, anti-captcha, bad-behaviour, httpbl, etc

also with simple .htaccess that block any bot direct POST that do not come from your own site (check referer)

or, simply outsource your comment system to disqus and sleep tight.

0
ответ дан 7 November 2019 в 10:44
поделиться

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

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

2
ответ дан 7 November 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: