Denis Gladkikh

outcoldman

My personal blog about software development

  • 29 Jul 2010
  • outcoldman.ru, OpenID, LiveID, Akismet, Spam, AntiSpam, web
  • 0 comments

Около неделе назад я начал получать около 10 комментариев со спамом в день к своим статьям. Спам писали с китайских IP адресов, текст всегда был разный, вроде на французском языке: какие-то отрывки из произведений со вставками-ссылками на сайты. И тут нужно было родить идею, как сделать так, чтобы избавиться от спама. Задал вопрос в твиттере и так же начал думать сам.

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

Итак, как же можно защититься от спама в комментариях?

CAPTCHA

CAPTCHA – это самая распространённая защита от спама, кто о ней не знает, но мне не нравится. Вообще, скажу одну мысль, мне кажется, что на моем сайте достаточно комментариев к каждой записи, потому что я не обременяю народ на ввод ненужных данных. Для того чтобы написать комментарий, нужно просто написать комментарий и нажать кнопку, а если уже хочется, тогда можно и представиться и подписаться на комментарии. Мне такой подход нравится больше всего. Поэтому добавлять CAPTCHA не хотелось бы.

Заведение регистрации на сайте

Хранение информации о пользователях у себя на сайте и регистрации на нем сразу отпадает, ну это чистой воды обременение пользователей, тогда я не увидел бы ни одного комментария к своим записям. Меня, например, такие просьбы на персональных сайтах сразу отталкивают. Другое дело – это LiveID или OpenID, первое отпадает, так как не так уж много людей, мне кажется, имеют его, скорее всего больше народу в стеке Microsoft продуктов, а хотелось бы слышать и видеть всех. Второе – хороший вариант, но разве спамер не может завести себе несколько OpenID аккаунтов, можно даже будет заводить black листы, чтобы банить эти аккаунты, но спамеры же не дураки, будут каждый новый комментарий отправлять с отдельного OpenID аккаунта. Конечно, спама будет немного поменьше, но ненадолго.

Простая модерация сообщений

Еще один из вариантов – это модерация всех сообщений. То есть публиковать комментарий только после того, как я его одобрю. Минус тут очевиден, если меня не будет на месте, то будут утихать разговоры между самими читателями этого блога. Да и к тому же я все же считаю, что 50% статьи еще делают и интересные комментарии, и откладывать публикацию их – это не очень хорошая практика. Другой минус – это то, что мне будет всегда хотеться не пропускать комментарии, в которых мне говорят, что я не прав, критикуют, унижают, высмеивают. Эти комментарии тоже должны быть, критика – это всегда хорошо, а когда она публичная, то еще лучше. Тогда точно будешь прислушиваться к ней. В общем, этот вариант для меня был ближе всего – добавить модерацию, но минусы все же имелись и я старался найти еще варианты решения проблемы.

Уловки на сайте

Была еще маленькая идея. В случае если спам отправляет бот, то можно попробовать генерировать при отдаче страницы какой-нибудь код для сессии, и отправлять его при добавлении комментария. Такой способ только спасет при попытке бота изучить логику POST запроса, и повторять всегда один и тот же запрос. Мне показалось, что в моем случае – это так же не выход, так как, вроде как, комментарии отправлялись даже не ботом, а людьми. К тому же будут проблемы при использовании Кеша – тут можно попробовать этот код всегда получать через Javascript Ajax запросом, но при интенсивном наплыве пользователей (известным как хабраэффект ;) ), скорее всего, полезут ошибки.

Сервисы для распознавания спама в комментариях

Вот всплыла у меня в голове такая мысль, а есть ли такие решения. Оказалось, что есть, нашел статью Akismet C# API for the .Net Framework 1.1 and 2.0, которая привела меня к сервису http://akismet.com/, а у них бесплатное предоставления услуг для персональных сайтов, что не может не радовать. По их блогу видно, что контора занимается исследования проблемы борьбы со спамом очень тщательно, проводят анализы, обновляются, совершенствуются. Спам, который я получал, видимо относился к 4 категории, описанный в статье State of Web Spam. Akismet, наверняка, очень хорошо известен блоггерам, которые используют WordPress, так как основа этого сервиса – это как раз плагин для WordPress. Для других платформ они так же приводят список сторонних решений на базе их сервиса. Ссылка на .Net не работает, этот проект перенесли на CodePlex. Вообще кода там, конечно же, не много, и я использовал реализацию, которую нашел в первой статье. Разницы между ними я не увидел.

Итак, все, что я сделал – это добавил проверку комментария перед вводом через сервис Akismet, если сервис считает, что это спам, тогда помечаю его и отправляю уведомление только на свой email. Соответственно, если спамом помечено ложно (а такое было к предыдущей статье: комментарий by Мохнатый был помечен как спам), то я могу просто убрать пометку о спаме, и отослать сервису Akismet информацию об этом. Так же, если сообщение не было помечено как спам, то я могу это сделать и сообщить об этом сообщении сервису. Этот сервис обучаем, так что, надеюсь, со временем он будет работать 100% на меня. Кстати, мне пришлось переписать немного реализацию, которую я взял из первой статьи, с реализацией с CodePlex проблем быть не должно.

Вывод

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

UPDATE: на хабре дали очень интересную ссылку с идеей немного автоматизированной системы для распознавания спама HOW I BUILT AN EFFECTIVE BLOG COMMENT SPAM BLOCKER

Comments