Что такое honeypot-поле в форме
Содержание
Поделиться
Honeypot-поле в форме — скрытое поле с пометкой оставить его пустым. По описанию OWASP его заполняют боты, а человек не заполняет. Если поле пришло непустым, отправку отклоняют. Приём дешёвый и не мешает обычному посетителю. Это один слой проверки заявки, а не ответ на скликивание.
Вам это нужно, если форма на сайте принимает заявки и вы хотите понять, что именно даёт «пустая ловушка», прежде чем считать её защитой. Ниже — как устроены два honeypot из раздела OWASP, почему один приём ломается и какое место у видимой капчи.
Что именно отклоняет отправку
Человек видит обычные поля: имя, телефон, комментарий. Скрытое поле в разметке есть, но в интерфейсе его нет, и рядом стоит просьба не заполнять его. Автоматический клиент, который обходит все поля подряд и подставляет в них значения, часто заполняет и это. Сервер смотрит на пришедшее значение. Пустое поле пропускает отправку дальше. Непустое — повод отклонить именно эту отправку.
OWASP называет приём дешёвым: посетителю не показывают головоломку и не просят лишнее действие. Для живого человека, который поле не видит, форма остаётся прежней.
Долю пойманных отправок и долю ложных отказов OWASP здесь не публикует. Из «дёшево и незаметно» не следует, что поле закрывает заявки. Если вы отсекаете спам только им, вы не знаете, какая часть автоматических отправок его обходит.
Почему одного поля мало
Задача, которую ставит OWASP, — не остановить всех ботов. Краулеры поиска, мониторинг и инструменты доступности законны. Нужно поднять цену злонамеренной автоматизации и при этом не задеть людей и законных ботов.
Один приём хрупок. Защиту собирают из трёх слоёв:
край сети — то, что встречает запрос до приложения;
само приложение — в том числе форма и проверка её полей;
бизнес-правила — что считать допустимой заявкой, регистрацией или заказом.
Скрытое поле живёт во втором слое. Оно не заменяет край сети и не заменяет правило «заявка без подтверждённого контакта не идёт в работу».
До выбора приёма OWASP просит понять, какие события каталога автоматических угроз относятся к каким точкам. Вход, регистрация, каталог и оформление заказа устроены по-разному. Поле, которое отсекает пустую отправку на форме «перезвоните», не отвечает на вопрос, кто листает каталог или кто жмёт кнопку заказа. Смешивать эти точки в одно правило «все боты» нельзя: законный краулер и клиент формы — разные клиенты.
Имена библиотек, пороги частоты и конкретная разметка поля здесь не задаются. Вам достаточно принципа: непустое скрытое поле — сигнал отклонить эту отправку, а не описание всей защиты сайта.
Второй honeypot: путь, который вежливый робот не просит
В том же разделе OWASP описывает ещё один приём. В robots.txt закрывают путь-приманку. Запрос к этому пути считают признаком клиента, который директиву не соблюдает. Клиентов, которые читают протокол, относят к тем, кто на закрытый путь не пойдёт.
Это не то же самое, что поле в форме. Поле смотрит на тело отправки. Путь смотрит на то, какой адрес клиент запросил. Оба называются honeypot, потому что оба предлагают автоматическому клиенту сделать то, чего человек или вежливый робот не делает.
Правила robots.txt не являются разрешением на доступ. Закрытая строка в файле не запирает файл на сервере. Запрос к приманке — признак в описании OWASP, а не замок. Если путь всё ещё отдаёт содержимое, его закрытие в robots.txt само по себе доступ не отменяет.
Как прятать путь и как его обходить, в открытое описание не входит. Долю ложных срабатываний по этому пути OWASP тоже не публикует — и это тот же предел, что у поля: признак нельзя выдавать за измеренную долю ботов.
Капча здесь запасной шаг, а не замена поля
Видимые капчи плохо доступны. Их решают машинным обучением и отдают сервисам людей-решателей. Место такой капчи — запасной шаг, когда проверку нужно усилить, а не основная защита формы.
Proof-of-work может поднять цену автоматического запроса. Он не доказывает, что клиент — человек. Слишком трудная задача сама может отказать живому посетителю: человек ждёт, а сервер считает, что проверка не пройдена.
Поле и капча стоят в разных ролях. Поле дёшево и не видно обычному посетителю. Капча видна и доступна плохо. Оба не отменяют хрупкость одного приёма. Ставить капчу «вместо honeypot», чтобы закрыть все заявки, значит перейти от дешёвого сигнала к запасному шагу и всё равно остаться на одном слое.
Цена решения капчи и названия сервисов-решателей в это описание не входят. Вам важно другое: видимая головоломка не становится основной защитой только потому, что поле кто-то научился пропускать.
Что сделать на своей форме
Порядок ниже собран только из этих ролей. Это не пороги и не готовая конфигурация.
Назовите точку. Это форма заявки, вход, регистрация или заказ? Для каждой точки события разные.
Если ставите скрытое поле, отклоняйте отправку, когда оно пришло непустым, и не ждите от этого долю «всех ботов».
Не считайте закрытый путь в robots.txt замком. Запрос к приманке — признак клиента, который директиву не читает.
Видимую капчу держите запасным шагом. Вычислительную задачу не путайте с доказательством, что перед вами человек.
Добавьте хотя бы ещё один слой: край сети или бизнес-правило заявки. Одного поля OWASP считает недостаточно.
Заполненное скрытое поле не объясняет, кто скликивает рекламу, чем кликфрод отличается от скликивания, почему недействительные клики не всегда списывают и вернёт ли Яндекс деньги. Это другие решения, их принимает рекламная площадка по своим правилам.
| Приём | Что видит человек | Что считается сигналом | Чего приём не делает |
|---|---|---|---|
| Скрытое поле | Обычную форму | Непустое значение в поле | Не измеряет долю поимки и не заменяет другие слои |
| Путь в robots.txt | Ничего, если путь не ищет | Запрос к закрытому пути | Не запирает доступ: файл просит, а не разрешает |
| Видимая капча | Головоломку | Пройденный или непройденный тест | Не основная защита; тест решают и люди, и программы |
| Proof-of-work | Ожидание или ничего | Потраченное вычисление | Не доказывает, что клиент человек |
Если форма кормит рекламные цели, отсев пустого поля всё равно не отвечает на вопрос, был ли клик живым. Сначала разберите отправку. Потом смотрите визит в рекламе отдельно.