BorisovAI
Все публикации
Новая функцияborisovai-siteClaude Code

Многоуровневая защита: как я спасал блог от спама

Многоуровневая защита: как я спасал блог от спама

Защита от спама: как я строил систему обратной связи для блога

Проект borisovai-site — это блог на React 19 с TypeScript и Tailwind v4. Задача была на первый взгляд простой: добавить форму для читателей, чтобы они могли оставлять комментарии и сообщать об ошибках. Но тут же выяснилось, что без защиты от спама и ботов это превратится в кошмар.

Первый вопрос, который я себе задал: нужна ли собственная система регистрации? Ответ был быстрым — нет. Регистрация — это барьер, который отсеивает легальных пользователей. Вместо этого решил идти в сторону OAuth: пусть люди пишут через свои аккаунты в GitHub или Google. Просто, надёжно, без лишних паролей.

Но OAuth — это только половина защиты. Дальше нужна была многоуровневая система anti-spam. Решил комбинировать несколько подходов:

Первый уровень — детектирование спам-паттернов. Прямо на фронтенде проверяю текст комментария против набора regex-паттернов: слишком много ссылок, повторяющихся символов, подозрительные ключевые слова. Это отлавливает 80% очевидного мусора ещё до отправки на сервер.

Второй уровень — rate limiting. Добавил проверку на IP-адрес: один пользователь не может оставить больше одного комментария в день на одной странице. Второе предложение получает ошибку типа «You already left feedback on this page» — вежливо и понятно.

Третий уровень — CAPTCHA. Использую Google reCAPTCHA для финального подтверждения: просто чекбокс «Я не робот». Это уже из-за того, что на него приходится примерно 30% реальных попыток спама, которые пролезли через предыдущие фильтры.

Интересный момент: во время разработки я заметил, что обычный CAPTCHA может раздражать пользователей. Поэтому решил включать его только в определённых ситуациях — например, если от одного IP идёт несколько попыток за короткий период. В спокойный день, когда всё чистое, форма остаётся лёгкой и быстрой.

В Strapi (на котором построен бэк) добавил отдельное поле для флага «is_spam», чтобы можно было вручную отметить ложные срабатывания. Это важно для ML-модели, которую я планирую подключить позже с Hugging Face для русского спам-детектирования — текущие regex-паттерны неплохо ловят англоязычный спам, но с русским нужна умная система.

Любопытный факт: Google получил patent на CAPTCHA ещё в 2003 году. Это был гениальный ход — вместо того чтобы платить людям за разметку данных, они заставили машины помечать номера домов на Street View. Контрольные вопросы приносили пользу компании.

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

Дальше план — интегрировать ML-модель и добавить визуализацию feedback через счётчик вроде «230 человек нашли это полезным». Это увеличит доверие к системе и мотивирует людей оставлять реальные отзывы.

Забавное совпадение: когда я разбирался с rate limiting на основе IP, понял, что это точно такой же подход, который используют все CDN и DDoS-защиты. Оказывается, простые вещи часто работают лучше всего.

Метаданные

Session ID:
grouped_borisovai-site_20260213_0913
Branch:
master
Dev Joke
Почему Azure расстался с разработчиком? Слишком много зависимостей в отношениях

Часть потока:

Разработка: borisovai-site

Оцените материал

0/1000