Как бороться со спамом в блогах без капчи

Чёрные списки, проверка рефереров, поиск тегов <a> и даже запрет китайских иероглифов... Как оказалось, это всё бесполезно. Нет, оно работает, режет кучу спама и позволяет удалять по 10-20 сообщений в день вместо тысячи, но реально помогает только одно:

if ($http_user_agent ~ 'MSIE 6.0') {
    return 403;
}

т.е. запрет посещения блога для Internet Explorer 6 на уровне nginx, который в моём случае работает в качестве прокси для uwsgi.

Теперь, пока китайцы не обновят своих ботов или не начнут ставить рандомный user agent, можно жить спокойно.

Для удлиннения статьи статистики приведу немного нагрепанной в логах информации. Хотя время разделения логов на файлы и не совпадает, думаю, суть будет ясна "без перевода".

Если кто не понимает, что тут творится, поясняю: в файлы с логами в одну строку (это важно) пишется информация об открываемой странице, в том числе код состояния HTTP. Когда спам отсекается на уровне движка, код 403 пишется в оба лога, а когда на уровне nginx, до движка дело не доходит. Я ищу последовательность "пробел403" (если искать просто "403", то будет много ложных срабатываний) в обоих логах, взяв по паре относительно старых и новых. Чем старше лог, тем больше его номер. Количество строк считает wc -l.

Как видно, у движка просто "гора упала с плеч":

root@ls:~# zgrep \ 403 /var/log/uwsgi/app/blog.log.1 | wc -l
101
root@ls:~# zgrep \ 403 /var/log/uwsgi/app/blog.log.2 | wc -l
3
root@ls:~# zgrep \ 403 /var/log/uwsgi/app/blog.log.9 | wc -l
5597
root@ls:~# zgrep \ 403 /var/log/uwsgi/app/blog.log.10 | wc -l
4812

Хотя поток спама не прекратился:

root@ls:~# zgrep \ 403 /var/log/nginx/blog.access.log.1 | wc -l
4443
root@ls:~# zgrep \ 403 /var/log/nginx/blog.access.log.2 | wc -l
5156
root@ls:~# zgrep \ 403 /var/log/nginx/blog.access.log.9 | wc -l
5597
root@ls:~# zgrep \ 403 /var/log/nginx/blog.access.log.10 | wc -l
4806

И это ещё без учёта того, что некоторые боты сначала запрашивают страницу со статьёй, а только потом отсылают комментарий.

Вот такие дела.

P.S. Злобный спамер, если ты читаешь эту статью, помни, что премодерация в этом блоге была, есть и будет всегда. И я скорее отключу комментарии (которые всё равно почти никто не пишет) вовсе, чем превращу источник информации в помойку.

Комментарии (RSS)

Не останавливайся, пиши.
Комменты лучше не убирать :)

Ответить Отменить ответ