Caputchin
Понимание Caputchin

Инструментирование

Proof of work доказывает, что усилие было потрачено. Он не доказывает, что его потратило. Упорный злоумышленник с фермой настоящих браузеров может дёшево перемалывать головоломки. Инструментирование это второй слой, который закрывает этот разрыв: оно доказывает, что работа произошла внутри подлинного браузера.

Как это работает

На каждом запросе Caputchin генерирует свежую, одноразовую программу на JavaScript и запускает её в браузере посетителя. Программа задействует машинерию, которая есть только у настоящего браузера, и отчитывается о том, что наблюдала:

  • Пробы браузерного API, которые проверяют, что подлинная функциональность браузера присутствует и ведёт себя правильно.
  • Цепочки вычислений из побитовых целочисленных операций.
  • DOM-арифметика, которая строит деревья элементов, читает значения, которые движок раскладки для них вычисляет, и разбирает их обратно.

Фокус в асимметрии: настоящий рендеринг-движок выдаёт правильные ответы почти задаром, а headless- или скриптовый рантайм заглушает эти операции, реализует их неправильно или пропускает ради скорости. Несоответствие выдаёт посетителя.

Content-Security-Policy

Поскольку программа запускает eval в браузере посетителя, страница, встраивающая твой виджет, должна разрешать 'unsafe-eval' в своей Content-Security-Policy script-src. Для этого нет отката: если 'unsafe-eval' заблокирован, программа не может запуститься, и проверка сбоит. Если твоя политика не может его разрешить, выключи инструментирование для ключа на его странице Безопасность, что снимает требование ценой выявления автоматизированных браузеров (proof of work и любая требуемая игра по-прежнему работают). Смотри изоляцию игр в песочнице для полной политики хост-страницы.

Почему оно в паре с proof of work

Два слоя покрывают слепые зоны друг друга. Proof of work в одиночку можно дёшево намайнить настоящими браузерами; инструментирование в одиночку мог бы подделать скрипт, который никогда не делает работу. Вместе они поднимают цену по двум независимым осям: proof of work доказывает усилие, инструментирование доказывает окружение.

Обфускация

Поскольку программа поставляется посетителю, мотивированный злоумышленник мог бы изучить её и попробовать предвычислить ответы. Чтобы сделать это труднее, программа обфусцирована. Страница Безопасность ключа выставляет Уровень обфускации: повышение его делает программу труднее для обратной разработки, ценой большего серверного CPU. Те же сигналы стоят за опцией Блокировать автоматизированные браузеры, которая наотрез отклоняет выявленные headless- и WebDriver-клиенты.

Честный предел

Инструментирование не безотказно. Стелс-браузеры латают признаки, которые оно ищет, и сами проверки отмечают, что их можно обойти. Это один слой среди нескольких, сильнейший, когда сложен с proof of work и остальными настройками безопасности ключа.

На этой странице