Спам в заявках: полный гайд по защите форм
Содержание
Поделиться
Спам в заявке — это сомнительное или вредоносное содержимое в сообщении, а не любой лид, который не купил. Каталог OWASP называет это событие Spamming: добавление такой информации в открытое или закрытое содержимое либо в сообщения. Среди других имён на странице — form spam, comment spam и review spam. Содержимое может быть рекламой, попыткой поисковой оптимизации или попыткой разбавить и спрятать другие записи. Долю спама среди заявок и устройство российских форм каталог не приводит. Массовая рассылка через сломанную отправку формы на почту или SMS в это событие не входит.
Скликивание форму не чистит. Директ к тому же не относит к недействительному трафику нецелевое заполнение, неверный контакт и форму ради вознаграждения. Защищать форму имеет смысл как свою границу, а не как способ вернуть клики.
Что кабинет не вычтет
Директ не относит к недействительному трафику повторные конверсии в разных визитах, повторное открытие страницы «Спасибо», неверно указанный контакт, нецелевое заполнение полей и форму, заполненную ради вознаграждения. Недействительные клики в этот перечень не входят как «плохая заявка». Кликфрод и скликивание описывают клик и показ. Заявка с рекламой в тексте может быть спамом по каталогу OWASP и одновременно не быть недействительным трафиком Директа.
Кто и зачем скликивает рекламу, текст формы не размечает. Возвращает ли Яндекс деньги за скликивание, от поля-ловушки не зависит. Если цель гайда — меньше мусорных писем менеджеру, настраивайте форму. Если цель — кредит в кабинете, этот перечень говорит, что нецелевая и «за вознаграждение» заявки туда не подходят.
Капча замедляет и не закрывает
Рекомендации OWASP по защите от подстановки чужих паролей говорят, что капча на попытке входа помогает заметить автоматизацию и может замедлить подбор, но не совершенна: существуют инструменты и сервисы, которые решают капчу с заметно высокой долей успеха. Блокировка IP останавливает простой перебор и не должна быть единственной защитой: адрес легко сменить, а распределённый заход через прокси держит низкую частоту с одного адреса. Клиентские проверки, включая JavaScript, можно подделать, поэтому нужен второй слой. Имена программ и пороги частоты в рекомендациях остаются за кадром: нужен второй слой, а не список обходов.
На форме это читается так же. Капча перед отправкой может замедлить скрипт. Пройденный тест не доказывает, что заявку собрал человек. Один запрет адреса не держит заход, который меняет IP и стучится редко.
Пустое поле, которое должен оставить пустым человек
В разделе про honeypot те же рекомендации описывают скрытое поле формы с пометкой оставить его пустым. По описанию его заполняют боты, а человек не заполняет. Если поле пришло непустым, отправку отклоняют. Приём назван дешёвым и без влияния на обычного посетителя. Доли поимки и ложных отказов на странице нет. Там же сказано, что один приём хрупок. Разметку, имена полей и замедление ответа берите не из этого гайда: оставьте поле пустым для человека, отклоняйте непустую отправку и не делайте поле единственной мерой.
Задача в браузере — не вместо отказа
Подозрительному визиту Binetro может выдать вычислительную задачу в браузере. Верное решение подтверждает проверку и может сменить решение «проверить» на «пропустить». Решение «не пустить» задача не отменяет. Задачу нельзя предъявить вместо пропуска. Сложность, срок и формат не публикуются. Для формы это значит: задача может подтвердить визит, который ещё под вопросом, и не превращает уже принятый отказ в отправку заявки. Это не капча с картинкой и не поле-ловушка.
Порядок на форме
Назовите, что вы отсекаете. Сомнительный текст в сообщении — спам в смысле каталога. Нецелевой, но честный лид и форма ради вознаграждения — не недействительный трафик Директа и не повод ждать возврата.
Поставьте серверную проверку. Клиентский JavaScript подделывается, одного его мало.
Капчу, если она есть, считайте замедлением, не замком. Тест решают инструменты, сервисы и люди.
Добавьте скрытое поле, которое человек оставляет пустым, и отклоняйте отправку, если оно пришло заполненным. Не оставляйте поле единственной мерой: один приём хрупок.
Не стройте защиту на одном списке IP. Адрес меняется, редкие заходы с разных адресов простой запрет не держат.
Если на визите стоит вычислительная задача, не ждите, что верный ответ отменит отказ. Задача подтверждает проверку и может сменить «проверить» на «пропустить». «Не пустить» она не отменяет, и подменять ею пропуск нельзя.
Отдельно решите, что делать с текстом, который уже дошёл: спам в каталоге — это содержимое сообщения, и отсев до отправки его не размечает задним числом.
| Приём | Что даёт | Предел |
|---|---|---|
| Капча | Замечает автоматизацию и замедляет подбор | Тест решают, доля успеха у сервисов заметно высокая |
| Запрет IP | Останавливает простой перебор | Адрес меняют, частота с одного адреса низкая |
| Скрытое пустое поле | Дёшево, обычный посетитель его не заполняет | Один приём хрупок, долю поимки каталог не приводит |
| Вычислительная задача Binetro | Верный ответ может сменить «проверить» на «пропустить» | Отказ не отменяет, вместо пропуска не ставится |
| Жалоба в Директ на текст заявки | — | Нецелевое заполнение и форма ради вознаграждения недействительным трафиком не являются |
Учебный проход одной заявки, не статистика. В поле «комментарий» пришёл чужой прайс и ссылка. Это похоже на добавление сомнительной информации в сообщение, то есть на спам каталога, а не на клик, который Директ обязан вычесть. Скрытое поле при этом пришло пустым: ловушка заявку пропустила. Капча могла быть решена. Дальше остаётся серверное правило на содержимое и решение по визиту, которое задача в браузере не заменяет, если отказ уже принят. Цифр «сколько таких заявок в неделю» в источниках нет, и пример их не добавляет.
Что поставить на форму за один проход
Соберите форму так, чтобы каждый слой закрывал дыру предыдущего, и не ждите, что Директ оплатит мусор.
Сервер принимает отправку только после своей проверки. Поле email в браузере, если оно есть, смотрит вид строки, а не существование ящика, и HTML можно поменять у себя — это уже соседняя тема контакта, здесь достаточно помнить, что клиентский слой подделывается. Капча перед кнопкой замедляет скрипт и замечает автоматизацию. Пройденный тест человеком не является: инструменты и сервисы решают капчу с заметно высокой долей успеха.
Рядом — скрытое поле с пометкой оставить его пустым. Человек его не заполняет, непустую отправку отклоняют. Приём дешёвый. Он один хрупок, поэтому не снимайте серверную проверку, когда поле уже стоит. Список IP оставьте для простого перебора: адрес меняется, а редкие заходы через прокси с одного адреса запрет не держат.
Вычислительную задачу ставьте на подозрительный визит, не на каждую отправку вместо пропуска. Верный ответ может сменить «проверить» на «пропустить». Отказ он не покупает. Если в комментарии уже лежит чужой прайс, это содержимое сообщения, то есть спам в смысле каталога, даже когда ловушка была пустой. Нецелевую честную заявку и форму ради вознаграждения в недействительный трафик не записывайте: Директ их туда не относит, и возврата из этого гайда не ждите.
Проверьте собранную форму тремя отправками, учебными, не как статистику. Первая: пустые видимые поля и пустая ловушка. Сервер должен отказать по своим правилам, не по скрытому полю. Вторая: нормальный комментарий и заполненная ловушка. Отправка отклоняется, потому что поле пришло непустым. Третья: чужой прайс в комментарии и пустая ловушка. Ловушка молчит, капча могла быть решена, и остаётся правило на содержимое. Если визит уже получил отказ, вычислительная задача эту заявку не протащит. Если решение было «проверить» и ответ верный, визит может стать пропуском. Ни одна из трёх отправок не становится недействительным кликом Директа только из-за текста.
Соберите это в чек-лист перед включением формы. Есть серверная проверка, без неё клиентский скрипт подделывается. Капча, если стоит, подписана у вас как замедление, не как доказательство человека. Скрытое поле пустое для человека, непустая отправка отклоняется, и поле не единственное. IP не единственный барьер. Вычислительная задача не предлагается вместо пропуска и не отменяет отказ. В кабинете Директа нецелевые поля, неверный контакт, повтор в другом визите, повтор страницы «Спасибо» и форма ради вознаграждения не числятся недействительным трафиком, поэтому спор о возврате по ним не открывают. Содержимое, которое каталог называет спамом, вы разбираете как текст сообщения, отдельно от клика.
Повторите границу ещё раз на словах менеджера, без новых обещаний. «Нам написали чужой прайс» — это содержимое сообщения, спам каталога, и его ловит правило на текст плюс слои до отправки. «Человек ошибся телефоном» и «заполнили ради приза» Директ недействительным трафиком не считает. «Один и тот же адрес стучится часто» закрывается плохо одним запретом IP: адрес меняют, а через прокси частота с одного адреса низкая. «Капча пройдена» означает, что тест решён, не что писал человек. «Задача в браузере решена» может сменить проверку на пропуск и отказ не снимает. Эти пять фраз не складываются в одну кнопку «вернуть бюджет». Повтор конверсии в другом визите и повторное открытие страницы «Спасибо» Директ тоже оставляет в обычном трафике. Спам каталога при этом может сидеть в тексте и не становиться поводом для кредита. Второй слой после капчи всё равно нужен: клиентский JavaScript подделывается, а один приём, включая пустое поле, хрупок. Блокировка IP этот второй слой не заменяет, потому что адрес легко сменить. Распределённый заход через прокси держит низкую частоту с одного адреса, поэтому список адресов простым перебором не исчерпывается и единственной защитой формы не становится. Капча на этом фоне только замедляет автоматическую отправку и человека не доказывает. Пройденный тест ещё не заявка живого человека.