Сначала различите виды нежелательных отправок
Простой рекламный бот, массовая атака, подбор промокода и ручной мусор ведут себя по-разному. Опишите форму, ценность операции и возможный ущерб. Контактная заявка и восстановление пароля требуют разных мер.
Соберите базовые показатели: объём, частоту, источники, повторяющиеся поля и время заполнения. Не храните лишние персональные сведения ради исследования. Агрегированных признаков часто достаточно.
Определите допустимый риск ложной блокировки. Потеря заявки на дорогую услугу может стоить больше ручной проверки нескольких подозрительных сообщений. Защита следует бизнес-контексту.
Все правила повторяются на сервере
Проверка в браузере помогает человеку, но бот может отправить запрос напрямую. Сервер ограничивает формат, длину, обязательность и допустимые значения каждого поля. Не доверяйте скрытым параметрам и цене из формы.
Нормализуйте ввод перед сравнением, но сохраняйте исходный смысл. Отклоняйте неожиданную структуру, слишком большие файлы и опасные типы. Сообщение пользователю остаётся понятным, а техническая причина попадает в защищённый журнал.
Используйте защиту от подделки запроса там, где форма меняет состояние аккаунта. Экранируйте вывод и применяйте безопасные запросы к базе: антиспам не заменяет базовую безопасность приложения.
Незаметные слои останавливают простой поток
Honeypot-поле скрыто от обычного интерфейса, но привлекает примитивный бот. Проверка слишком быстрого заполнения добавляет сигнал. Ни один признак не должен автоматически блокировать важную заявку без оценки контекста.
Rate limit ограничивает частоту по сочетанию IP, сессии, аккаунта и действия. Только IP ненадёжен для офисной сети и мобильных операторов. Используйте скользящие окна и временное замедление вместо вечной блокировки.
Репутация, повторяющийся текст и технические признаки формируют риск-оценку. Порог можно менять для разных операций. Сохраняйте объяснимость, чтобы поддержка понимала причину решения.
Проверку человеком показывают по риску
CAPTCHA создаёт трение, особенно на телефоне и для людей с ограничениями. Не ставьте сложную задачу перед каждым посетителем. Сначала применяйте фоновые признаки, а дополнительную проверку включайте при подозрении.
Выбирайте доступное решение с альтернативным способом и понятным восстановлением после ошибки. Не очищайте всю форму из-за неудачной проверки. Учитывайте блокировщики, медленную сеть и недоступность внешнего сервиса.
Оцените условия обработки данных поставщиком. Внешний виджет добавляет скрипт, запросы и зависимость. Для небольшой формы собственные слои иногда дают лучший баланс.
Защитите связанные действия после отправки
Спам может атаковать не базу заявок, а почтовую доставку, SMS или сторонний API. Ограничьте повторные уведомления и не позволяйте пользователю управлять адресом получателя. Секреты интеграций остаются на сервере.
Файлы проверяют по типу, содержимому и размеру, сохраняют вне публичного исполнения и переименовывают. Сканирование снижает риск, но не оправдывает выдачу загруженного файла как активного кода.
Для регистрации и восстановления добавьте ограниченный срок токена, одноразовость и нейтральный ответ, не раскрывающий наличие аккаунта. Уведомляйте владельца о значимых изменениях.
Полезная заявка должна гарантированно дойти
После приёма сохраните событие до отправки почты. Очередь с повторами защищает от краткого сбоя провайдера. Статус в интерфейсе соответствует фактическому приёму, а не только нажатию кнопки.
Настройте доменную аутентификацию исходящей почты и используйте стабильный адрес отправителя. Контакт клиента помещают в Reply-To после проверки, а не подменяют им технического отправителя.
Дайте бизнесу резервный интерфейс заявок или интеграцию с CRM. Почтовый ящик не должен быть единственным местом хранения. Контролируйте ошибки доставки.
Антиспам не оправдывает бесконечный сбор данных
Сообщите, какие сведения обрабатываются, зачем и кому передаются. IP, отпечаток устройства и данные внешней CAPTCHA могут относиться к персональным. Срок хранения связан с целью защиты.
Ограничьте доступ к подозрительным сообщениям и журналам. Не копируйте полные тексты заявок во множество каналов. Удаление должно охватывать основную систему, архивы по правилам и внешние интеграции.
Для юридически значимых решений согласуйте практику со специалистом конкретной юрисдикции. Техническая возможность собрать сигнал не означает, что его следует использовать.
Баланс защиты проверяется постоянно
Измеряйте принятые, отклонённые и требующие проверки отправки, частоту по формам и причины блокировки. Резкий спад заявок может быть успешной фильтрацией или поломкой формы.
Создайте безопасный способ пересмотреть пограничные случаи и вернуть ошибочно заблокированное сообщение. Не храните спам бесконечно. Периодически проверяйте форму реальным сценарием.
Атакующий поток меняется, поэтому корректируйте правила небольшими шагами. Хорошая система остаётся почти незаметной честному посетителю и даёт команде понятные сигналы.
