Сайт Романа ПарпалакаБлог20250427

Подключил Akismet для борьбы со спамом

27 апреля 2025 года, 20:59

Когда-то давно я сделал в своем движке сайтов S2 защиту от спама на основе Javascript. В те времена она неплохо работала, потому что спамерские боты не выполняли js-код. А на форме комментария был определенный скрипт, который заполнял и скрывал специальное поле с дополнительным вопросом.

Со временем технологии развивались, и через selenium разработчики автоматизировали действия ботов через полноценные браузеры. Метод защиты с помощью Javascript стал фильтровать только самых тупых ботов.

Затем для борьбы со спамом я включил предарительную проверку комментариев перед публикацией. К этому времени поток комментариев на сайте как раз уменьшился. Немногочисленные нормальные комментарии легко одобрить вручную, особенно когда отвечаешь на них. Тогда же я запрограммировал обход предварительной проверки для залогиненных модераторов — пользователей, которые управляют отображением комментариев.

Чтобы облегчить себе жизнь по окончательному удалению спаммерских комментариев из очереди на модерацию, я задумался над тем, какова цель спаммеров? Конечная цель — разместить ссылки для манипуляции индексом цитирования и для привлечения посетителей. Если запретить оставлять ссылки, спаммерам не будет смысла оставлять комментарии без них. А если ссылку хочет разместить человек в хорошем комментарии, сайт скажет ему, чтобы он удалил http:// из ссылки. Запрет на ссылки принес свои плоды, но какие-то спаммерские комментарии всё равно пролезали даже без явных ссылок.

Сейчас я решил посмотреть, как привлечь новые технологии для фильтрации спама. Теоретически можно натренировать нейросеть на каком-то множестве спаммерских и хороших комментариев и делегировать ей задачу фильтрации. Идея реализации классификатора текстов описана в статье на хабре аж восьмилетней давности. Решил спросить у ChatGPT, что он предложит по поводу классификации. Решения с обучением нейросетей оказались не очень простыми, но кроме них он ещё предложил использовать готовый сервис Akismet.

Akismet — это система фильтрации спама в комментариях, разработанная авторами WordPress. В вордпрессе есть плагин, который обращается к API Akismet. Однако сам API открыт и может быть использован любым сайтом, для обращения нужен только лицензионный ключ. Лизензия для некоммерческого использования бесплатная.

Основная особенность Akismet заключается в том, что он используется на множестве сайтов. Таким образом можно быстро выявлять новые ip-адреса спамеров и изменения в поведении ботов, адаптировать алгоритмы защиты и распространять их сразу на все сайты.

Я подключил сервис и несколько дней его тестировал. По каждому комментарию Akismet возвращает свое решение: либо это хороший комментарий, либо спам, либо «вопиющий» (blatant) спам. В итоге остановился на следующем алгоритме фильтрации комментариев:

После внедрения за две недели пришло 62 комментария. Из них 60 спаммерских комментариев были отсеяны либо как вопиющий спам (21 комментарий), либо как спам с наличием ссылок в тексте. Остальные два комментария опубликованы: один хороший комментарий и один спаммерский со ссылкой на yotube.

Из-за низкого потока комментариев набрана небольшая статистика, и масштаб проблемы с опубликованным спаммерским комментарием неясен. Для окончательных выводов нужно подождать ещё. Или же приходите в комментарии, чтобы протестировать защиту от спама :)

Понятно, что у способа есть свои недостатки. Во-первых, появилась зависимость от внешнего сервиса. Правда, эта зависимость не критичная, так как при недоступности сервиса произойдет откат к старому алгоритму. Во-вторых, появилась минимальная задержка при сохранении комментария. Среднее время ответа Akismet у меня составило 150 мс с определенным разбросом, причем все ответы укладываются в 300 мс. На случай сетевых проблем я установил таймаут ожидания ответа по HTTP в 2 секунды. В целом пока всё выглядит так, что полученные преимущества перевешивают эти незначительные недостатки.

Поделиться

Задача о шпионах за круглым столом Ctrl

Читайте также

Комментарии

#1. 12 мая 2025 года, 15:01. Ivan Do пишет:
Хороший комментарий — это всегда хороший комментарий.
Его можно и опубликовать, если в нём есть смысл.

Смысл моего комментария: проверить как работает описанная выше система фильтрации.
Например, я очень люблю короткий поиск яндекса, который ya.ru, но он, увы, теперь заблокирован за границей.

Пользуясь случаем хочу еще задать вопрос про развитие движка S2. Наблюдаю за ним уже очень давно, делал на нём несколько проектов, очень понравилась скорость. Даже пару плагинов получилось сделать. Есть ли что-то в планах сейчас?
#2. 12 мая 2025 года, 19:37. пишет:
Я писал о текущем состоянии движка тут: https://parpalak.com/blog/2023/08/25/thoughts_on_S2
С тех пор я в фоновом режиме удалил или переписал практически весь старый код.

По сравнению с 1.0 шаблоны работают так же, немного по-другому работают стили (добавилось подключение css и js и возможность задавать шаблоны с html-кодом), а система расширений изменилась полностью.

Теоретически последнюю версию можно брать и использовать. Но я не задокументировал все изменения и мне не хочется тратить время на бесплатную поддержку пользователей. А как эффективно продавать всю эту историю, я тоже не придумал.

Оставьте свой комментарий


Формулы на латехе: $$f(x) = x^2-\sqrt{x}$$ превратится в $$f(x) = x^2-\sqrt{x}$$.
Выделение текста: [i]курсивом[/i] или [b]жирным[/b].
Цитату оформляйте так: [q = имя автора]цитата[/q] или [q]еще цитата[/q].
Других команд или HTML-тегов здесь нет.

Записи