Caputchin
Ключи сайта

Безопасность

Страница Безопасность ключа сайта решает, насколько трудным будет испытание и каким запросам дозволено до него дойти. Значения по умолчанию это разумная середина; эта страница о том, когда от них уходить и в какую сторону.

Начни здесь

Большинству сайтов стоит оставить значения по умолчанию в покое. Тянись к ручкам ниже, когда у тебя есть причина:

  • Ты под активным злоупотреблением или форма высокоценная (регистрации, платежи, сброс пароля): подними защиту. Повысь Сложность, повысь Уровень обфускации и включи Блокировать автоматизированные браузеры. Ты меняешь немного вычислений посетителя и часть серверного CPU на куда более высокую стену.
  • Скорость и конверсия важнее всего, а риск низок (поле подписки на маркетинговой странице): держи защиту лёгкой. Оставь Сложность низкой и Испытаний на запрос на 1, чтобы испытание было пушинкой на дешёвом телефоне.

Остальная часть этой страницы это каждая ручка и в какую сторону её крутить.

Потребуй игру

Самый сильный рычаг здесь это требование к посетителю сыграть в игру, чтобы пройти, а не просто пройти тихую фоновую проверку. Включи Требовать игру для проверки, здесь, на странице Безопасность, и каждый посетитель должен пройти одну из зарегистрированных на этом ключе игр. Сервер выбирает, какую игру получит каждый посетитель, так что её нельзя пропустить или подменить.

Ты регистрируешь игры, которые может использовать ключ, и там же ворота объясняют себя в полном виде, на странице ключа Игры и игровые ворота. Ты не можешь включить ворота, пока не зарегистрирована хотя бы одна игра. Оставить их выключенными это менее безопасный выбор: ключ можно пройти без игры.

Proof of work: Сложность и Испытаний на запрос

Proof of work заставляет браузер решить маленькую головоломку, чтобы злоупотребление в масштабе стало дорогим (смотри proof of work).

  • Сложность (от 1 до 8) задаёт, насколько трудна каждая головоломка. Выше стоит злоумышленнику дороже, но и устройству посетителя дороже, что слабые телефоны чувствуют в верхней части диапазона. Начни со значения по умолчанию и поднимай его, только если реально видишь злоупотребление.
  • Испытаний на запрос (от 1 до 500) просит несколько решений сразу, умножая стоимость. Оставь на 1, если у тебя нет конкретной причины навалить больше.

Браузер решает эти головоломки в Web Worker, так что Content-Security-Policy твоей страницы должна разрешать blob: для воркеров (worker-src blob:); это обязательно. Разрешение 'wasm-unsafe-eval' в script-src дополнительно позволяет решателю работать как быстрый WebAssembly, но это опционально: без него решатель откатывается на более медленную реализацию на чистом JavaScript внутри того же Worker, и проверка всё равно работает. Смотри изоляцию игр в песочнице для полной политики хост-страницы.

Инструментирование: Уровень обфускации и Блокировать автоматизированные браузеры

Инструментирование запускает маленькую программу в браузере посетителя, чтобы проверить, что испытание решил настоящий браузер, а не скрипт (смотри инструментирование). Оно включено по умолчанию и является единственным слоем, который отличает настоящий браузер от автоматизированного.

  • Инструментирование можно выключить на каждом ключе. Оставь его включённым почти для каждого сайта. Выключай его, только если страница, встраивающая твой виджет, работает с Content-Security-Policy, которая не может разрешить 'unsafe-eval' (программе инструментирования это нужно, смотри ниже). С выключенным инструментированием ключ больше не может выявлять автоматизированные браузеры, хотя proof of work и любая требуемая игра по-прежнему работают, а две настройки ниже перестают применяться.
  • Уровень обфускации (от 1 до 10) это насколько трудна для обратной разработки внутрибраузерная программа. Выше сильнее, но использует больше серверного CPU. Значение по умолчанию подходит большинству сайтов; подними его, если ты частая, прицельная мишень злоумышленника.
  • Блокировать автоматизированные браузеры наотрез отклоняет выявленные headless- и WebDriver-клиенты. Включи это, если легитимная автоматизация никогда не касается твоей формы. Оставь выключенным, если ждёшь легитимных ботов (твой собственный мониторинг, партнёрские интеграции, инструменты доступности), потому что оно заблокирует и их.

Content-Security-Policy

Программа инструментирования запускает eval в браузере посетителя, так что страница, встраивающая твой виджет, должна разрешать 'unsafe-eval' в своём script-src. Это единственное жёсткое требование CSP, и у него нет отката: если 'unsafe-eval' заблокирован, проверка истекает по тайм-ауту, и консоль браузера показывает [cap] Instrumentation failed. У тебя два выбора: разрешить 'unsafe-eval' на страницах, где живёт виджет, или выключить Инструментирование (выше), чтобы убрать требование. Полный список того, что нужно CSP хост-страницы, на странице изоляция игр в песочнице.

Обязательные заголовки

Ты можешь потребовать, чтобы каждый запрос нёс конкретный заголовок. Большинству сайтов это не нужно; полезно, когда твой собственный клиент всегда шлёт заголовок, на который ты можешь опереться, как на дешёвый дополнительный фильтр.

Чего ты не можешь требовать, так это заголовки, которые Caputchin убирает ради приватности до того, как запрос вообще дойдёт до проверки. Они идентифицируют посетителя, а позиция Caputchin в том, чтобы не собирать пер-посетительские данные, так что он отбрасывает их на границе платформы:

Убираемый заголовокПочему он отбрасывается
cf-connecting-ipIP посетителя, выставляемый Cloudflare. Никогда не пересекает границу, так что Caputchin его не хранит и по нему не проверяет.
x-forwarded-forIP посетителя, как виден через прокси. Та же причина.
x-real-ipIP посетителя от вышестоящих прокси. Та же причина.
user-agentСтрока User-Agent посетителя, которая идентифицирует его браузер и устройство.
sec-ch-ua* (каждый клиент-хинт Sec-CH-UA: sec-ch-ua, sec-ch-ua-platform, sec-ch-ua-mobile и прочие)Структурированная форма User-Agent. Та же граница приватности.

Требование одного из них заблокировало бы каждый запрос, потому что он никогда не прибывает, так что платформа отклоняет такую конфигурацию, а не даёт тебе сломать ключ.

Ограничение скорости и источники CORS

  • Максимум запросов в секунду ограничивает, насколько быстро ключ будет принимать запросы. Подними его, если ты по-настоящему высоконагружен; опусти его, чтобы придушить ключ, по которому молотят.
  • Источники CORS это твой список разрешённых источников, применяемый на сервере ещё до того, как запустится головоломка. Оставь его пустым, пока тестируешь с localhost; перед запуском добавь свои реальные источники, чтобы только твой собственный сайт мог использовать ключ.

См. также

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