В недавнем посте посвященном моему желанию избавится от каптчи в комментариях получилось очень интересное обсуждение. Я решил, что надо продолжить изучение проблем связанных с фильтрацией роботов и прочих не доброжелательных посетителей на сайты.
Сейчас хочу перечислить способы защиты которые мне попадались на других различных сайтах с возможностью публикации контента пользователями. Т.е. там где они прямые участники жизни ресурса, а поскольку люди все разные, а некоторые и не люди вовсе:)
Регистрация
Первый способ, самый простой и очевидный. Сделать систему регистрации во время которой проверить пользователя на "живость", и в последствии на основе полученных данных разрешить публиковать контент или нет.
Проверка заключается в подтверждении регистрации по почте - самый распространенный вариант. Но такая система заставляет пользователя всегда осуществлять вход на сайт перед тем, как он сможет что-то написать. Дополнительные трудности и например, чтобы добавить комментарий в блог нужно обязательно быть зарегистрированным и залогиненным на сайт, что может отпугнуть какого-то случайно зашедшего человека, но чьё мнение может быть полезно и интересно. Не хорошо и обидно.
Каптчи
Сюда входят всякого рода челенджи, через которые посетитель должен пройти и только после успешного прохождения у него будет возможность произвести какое-то действие. Встречаются несколько видов таких проверок:
- угадывание букв/слов на картинке
- простая математическая задачка, типа 2+2=?
- или ещё какой-то вопрос, который точно(ну с какой-то большой долей вероятности) сможет пройти только человек, но не робот.
Премодерация
Это например проверка администратором каждого нового сообщения и после его одобрения это сообщение становится доступно на всеобщее обозрение. Тоже не удобно, поскольку требует наличие это администратора всегда "включенным", чтобы не создавать задержек в проверке и размещении контента. Для блога это не удобно и напряжно для "автора".
А если это сайт с большим числом активных посетителей, то одним администратором и не обойдешься. И вообще от такой системы страдают больше обычные посетители, которые оперативно не получаются обратную связь на свои действия.
Постмодерация
Проверка уже после публичного опубликования. Преимущество перед предыдущим способом по сути одно - нет задержки в публикации. Но добавляется вероятно достаточно долгого "весения" у всех на виду какой-то "плохой" информации, которая в худшем случаю будет отпугивать добропорядочных посетителей.
Публичная постмодерация
Модернизированный вариант постмодерации. Позволяет самим посетителям быть цензорами друг друга. И после некоторого количества негативных оценок, сообщение скрывается, а администратору идет уведомление о данном факте. Не плохой вариант. Но требует наличия некого количества активных пользователей всегда онлайн. Что конечно не проблема, если сайт интересный:)
Вот такие схемы я подглядел на разных сайтах, в том числе и блогах. Точно что-то упустил, поэтому надеюсь, что вы меня поправите и дополните.

Не факт. Добавить как раз можно и так, потом придётся на письмецо в мыле глянуть. :-)
Да. Интересный вариант. Akismet кстати где-то в этой области работает. Он на основе своей статистики анализирует запись и автора, а потом принимает решение о "вменяемости" оных. Так же он сочетает в себе ещё и возможность вручную сообщить spam или ham - т.е. постмодерация.
А в первую голову разработчику такой системы:) Если конечно не брать стороннюю реализацию.
Да, вообще всё больше склоняюсь к какому-то комплексному варианту из цепи проверок, но чтобы они были не навязчивы и прозрачны для пользователя.
Да, так происходит ведь только первый раз? Потом быть залогиненным надо, да? Или каждый раз получать на почту подтверждение:) А где гарантия, что комментатор вообще в почту посмотрит...
Нет. Если ты не залогинен - отправляется ссылка на подтверждение комментария. Если ты её нажал, то комментарии твои (все неподтверждённые) подтверждаются.
Вверху появляется надпись "смари фпочту!" Если не посмотрит - ну, что ж... Я мож загляну в непроверенные комменты и подтвержу, что это хороший комментарий. :-)
Около года назад у меня была задачка прикрутить антиспам к самодельному форуму (хи-хи:)), причём регистрации там быть не должно. Посещаемость на тот момент была порядка 1.5к в день, боты заходили регулярно. В итоге, сделал я такую штуку из 3-х частей: 1) В форме добавления сообщения не было поля URL. Я его добавил и сделал ему display:none. Поле ввода для сообщения переименовал в нечто вроде jJjfdsjkHOFSD и прикрутил. Сделал поле с именем message и опять же display:none. Все сообщения, которые приходят с заполненным полем message или url (которые пользователю не видны) отправляем в спам. 2) Прикрутил простую банилку по IP. Ей почти не пользовался, банил лишь то, что проходило через фильтр 1) и имело совсем левые айпишники (сайт был русскоязычный). 3) Фильтрация BB-тегов вида [url= и тому подобных. На том форуме они были другими, всё что идёт с этими - в спам. Фильтры выстроил в последовательность 1->2->3, вот кусочек логов (формат: дата; поймано фильтром 1); пропущено 1), но поймано 2); пропущено 1) и 2), но поймано 3)):
2007-03-27 31 0 1 2007-03-28 37 0 5 2007-03-29 57 0 2 2007-03-30 40 0 15 .... 2007-04-11 50 0 6 2007-04-12 45 0 10 2007-04-13 35 0 16 .... 2007-05-01 36 0 6 2007-05-02 27 0 3 2007-05-03 36 0 8 2007-05-04 95 0 2 ....
Как видно, приходит около 50 спаммерских сообщений, большая часть из которых срезается уже первым фильтром. От пользователя никаких действий не требуется вообще. Успехов в боях со спамерами :)
bw, точно, а вынести в class я не догадался :)
Alexey Moskvin, отличная идея.
А display:none ты указывал в стилях (style="display: none;") элемента или выносил в class или id? Если последнее, то странно что кто-то проходил этот фильтр.
..bw
bw, ну есть еще наёмные “работники“, которые вручную постят рекламу.
упс, тут уже есть, а я только что написал коммент про display:none в изначальном посте :-)
Насчёт спама я думаю, что конечно, это должны быть все перечисленные Алексеем Москвиным защиты, плюс регексп на матерные слова, албанский, и сейчас новое появилось - упчк (недавно флудили на хабре). Т.е. как можно больше засовывать в регексп, чтобы сразу отсекались нежелательные сообщения. Потом, по мере поступления, анализировать спам, и добавлять ключевые слова в регексп. Это проще, чем байес, и работает 100%.