← Решения Cloudflare по борьбе с ботами / bots / additional-configurations
JavaScript Detections
JavaScript Detections представляет собой отдельный тип проверки, не относящийся к Challenge Pages или Turnstile от Cloudflare. JavaScript Detections помогает Cloudflare решения для защиты от ботов выявлять автоматизированные запросы.
Хотя Challenge Pages и Turnstile полагаются на клиентские сигналы для определения подлинности запроса, функция JavaScript Detections в составе Bot Management также использует клиентские сигналы, но проверяет каждый без исключения запрос к вашему сайту.
Процесс
JavaScript Detections реализуется на вашем сайте с помощью лёгкого, невидимого фрагмента JavaScript-кода, который соответствует Cloudflare стандарты конфиденциальности ↗.
JavaScript внедряется только в ответ на запросы HTML-страниц или просмотры страниц, исключая AJAX-запросы. Трафик API и мобильных приложений не затрагивается.
Срок действия JavaScript Detections составляет 15 минут. Однако код внедряется повторно ещё до истечения сессии. После загрузки страницы скрипт откладывается и, где это возможно, выполняется в отдельном потоке, чтобы свести влияние на производительность к минимуму. Фрагменты JavaScript будут содержать источник, указывающий на Challenge Platform, с путями, которые начинаются с /cdn-cgi/challenge-platform/…
После внедрения JavaScript Detections на HTML-страницу браузер посетителя выполнит этот фрагмент JavaScript-кода, и cf_clearance cookie выдаётся посетителю. Информация JavaScript Detections хранится в cf_clearance cookie и используется для заполнения js_detection.passed.
- Если посетитель прошёл проверку и
cf_clearancecookie выдаётся, оно будет содержать результат:cf.bot_management.js_detection.passed=true - Если проверка не пройдена, cookie будет содержать результат:
cf.bot_management.js_detection.passed=false
Когда посетитель сталкивается с пользовательским правилом WAF на вашем сайте, это правило проверяет результат cf_clearance cookie. Результат cf_clearance cookie определяет, будет ли запрос пропущен, заблокирован или отправлен на проверку.
Чтобы включить JavaScript Detections и обеспечить их применение, выполните указанные ниже шаги.
1. Включите JavaScript Detections
Для клиентов с Bot Fight Mode JavaScript Detections включается автоматически, и его нельзя отключить.
Для клиентов Super Bot Fight Mode и Bot Management уровня Enterprise JavaScript Detections является необязательным.
-
На панели управления Cloudflare перейдите к разделу Security Settings страницу.
Перейдите в Настройки ↗ -
В настройках конфигурации плана трафика ботов выберите значок редактирования для JS detections и включите JavaScript Detections включить.
Подробнее о настройке защиты от ботов см. в Документация по ботам.
2. Обеспечьте принудительное выполнение JavaScript Detections
После включения JavaScript detections необходимо использовать cf.bot_management.js_detection.passed поле, чтобы создать Пользовательские правила WAF (или request.cf.botManagement.jsDetection.passed переменную в Workers).
При добавлении этого поля в пользовательские правила WAF его следует использовать на конечных точках, которые ожидают трафик браузера (не для нативных мобильных приложений и не для конечных точек WebSocket), после первого запроса пользователя к вашему приложению (Cloudflare требуется как минимум один HTML-запрос, прежде чем внедрить проверку JavaScript), а также вместе с действием Managed Challenge. Это связано с тем, что существуют законные причины, по которым пользователь мог не пройти проверку JavaScript Detection: проблемы с сетью, блокировщики рекламы, отключённый JavaScript в браузере, нативные мобильные приложения.
Предварительные требования
- Необходимо иметь Enterprise Bot Management подписку.
- На вашей зоне должна быть включена функция JavaScript Detections.
- Необходимо иметь обновили заголовки Content Security Policy для обнаружений на JavaScript.
- Не используйте это поле на конечных точках WebSocket.
- Используйте это поле только в выражении пользовательского правила, которое предназначено исключительно для трафика браузера.
- В качестве действия всегда следует выбирать Managed Challenge на случай, если легитимный пользователь не получил проверку по сетевым или браузерным причинам.
- Путь, указанный в конструкторе правил, никогда не должен быть первой HTML-страницей, которую посещает пользователь при переходе на ваш сайт.
cf.bot_management.js_detection.passed поле никогда не следует использовать в пользовательском правиле WAF, которое соответствует первому запросу посетителя на сайт. Чтобы Cloudflare мог внедрить обнаружение JavaScript, сначала должен произойти хотя бы один HTML-запрос.
(http.request.uri.path eq "/api/v4/user/create" and http.request.method eq "POST" and not cf.bot_management.verified_bot)
and (cf.bot_management.score lt 30 or !cf.bot_management.js_detection.passed)"botManagement": {
"jsDetection": {
"passed": false
}
}См. Документация по WAF для получения дополнительных сведений о создании пользовательского правила.
API
Если вы включите JavaScript Detections через панель управления, Cloudflare добавит тег script на все HTML-страницы, отдаваемые вашим сайтом. Если вы хотите ограничить, где отображается JavaScript Detections, это можно сделать с помощью скрипта JavaScript Detections API.
JavaScript Detections API предоставляет вам более детальный контроль над тем, когда и где JavaScript Detections внедряется на вашем сайте, а также возможность обработки обратного вызова (для логирования или других дополнительных действий).
Вы можете явно добавить ссылку на скрипт в /cdn-cgi/challenge-platform/scripts/jsd/api.js и ваш собственный код, вызывающий window.cloudflare.jsd.executeOnce на отдельных HTML-страницах вашего сайта.
Следующий скрипт необходимо добавить на каждую страницу, где вы хотите включить JavaScript Detections:
<script>
function jsdOnload(){
window.cloudflare.jsd.executeOnce(
{
callback: function(result){
console.log('jsd outcome', result);
}
}
);
}
</script>
<script src="/cdn-cgi/challenge-platform/scripts/jsd/api.js?onload=jsdOnload" async>Особенности
JavaScript Detections не гарантирует конкретный показатель бота.
- Если внедрение или выполнение JavaScript Detections завершится ошибкой и
cf.bot_management.js_detection.passed=false, отдельная эвристика Bot Management всё равно может дать1или выше по показателю бота, независимо от JavaScript Detections. - Если проверка JavaScript Detections пройдена успешно, итоговая оценка бота всё же может быть
1из-за других эвристик обнаружения (например, известный вредоносный IP-адрес, обнаружение по сигнатуре и другие), что приводит кjs_detection.passed=true, ноscore=1.
Ограничения
Если вы включили Bot Management до июня 2020 года
У клиентов, включивших Enterprise Bot Management до июня 2020 года, функция JavaScript Detections по умолчанию не включена (если она не была запрошена отдельно). Такие клиенты могут включить эту функцию самостоятельно в панели управления Cloudflare.
Если это первый запрос к вашему сайту
Первый запрос от нового клиента к вашему сайту или приложению обычно не содержит данных JavaScript Detections (cf.bot_management.js_detection.passed = false). Это связано с тем, что Cloudflare требуется как минимум один HTML-запрос, прежде чем внедрить JavaScript Detection и выдать cf_clearance cookie.
Последующие запросы могут включать cf_clearance cookie, если JavaScript выполнился успешно.
Если у вас есть политика безопасности контента (CSP)
Если у вас есть Content Security Policy (CSP), необходимо выполнить дополнительные шаги для внедрения JavaScript Detections:
- Убедитесь, что всё под
/cdn-cgi/challenge-platform/разрешён. Ваш CSP должен разрешать скрипты, отдаваемые с вашего origin-домена (script-src self). - Для
nonceтеги script:-
Если ваша CSP использует
nonceдля тегов script, Cloudflare добавляет эти nonce к скриптам, которые внедряет, анализируя заголовок ответа CSP. -
Если ваша CSP не использует
nonceдля тегов script и JavaScript Detections включена, вы можете увидеть ошибку в консоли, напримерRefused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-b123b8a70+4jEj+d6gWI9U6IilUJIrlnRJbRR/uQl2Jc='), or a nonce ('nonce-...') is required to enable inline execution.Мы настоятельно не рекомендуем использоватьunsafe-inlineи вместо этого рекомендуем использовать CSPnoncesв тегах script, которые мы анализируем и поддерживаем в нашей CDN.
-
Если у вас есть ETags
При включении JavaScript Detections (JSD) будут удалены ETags из HTML-ответов, в которые внедряется JSD.
Если ваш origin-сервер отправляет no-transform заголовок
Если ответ исходного сервера содержит Cache-Control: no-transform директивы Cloudflare не внедряет скрипт JavaScript Detections. cf.bot_management.js_detection.passed поле будет отображаться как missing для этих запросов.
Чтобы использовать JavaScript Detections, удалите no-transform директиву из Cache-Control в заголовках ответа на страницах, где должен выполняться JavaScript Detections. Дополнительные сведения см. в Директивы Cache-Control.