← Řešení Cloudflare pro boty / bots / additional-configurations
JavaScript Detections
JavaScript Detections je typ ověření (challenge) oddělený od Cloudflare Challenge Pages nebo Turnstile. JavaScript Detections pomáhá Cloudflare řešení pro ochranu před boty identifikovat automatizované požadavky.
Zatímco Challenge Pages a Turnstile se při určování pravosti požadavku spoléhají na signály na straně klienta, JavaScript Detections v rámci Bot Management se rovněž opírá o signály na straně klienta, ale spouští se u úplně každého požadavku na váš web.
Proces
JavaScript Detections se na vašem webu implementuje pomocí odlehčeného, neviditelného fragmentu kódu JavaScript, který se řídí standardy ochrany soukromí ↗.
JavaScript se vkládá pouze jako odpověď na požadavky na HTML stránky nebo zobrazení stránek, nikoli na volání AJAX. Provoz API a mobilních aplikací tím není ovlivněn.
JavaScript Detections má životnost 15 minut. Kód se ale vloží znovu ještě před vypršením relace. Po načtení stránky se skript odloží (deferred) a využívá samostatné vlákno (je-li k dispozici), aby byl dopad na výkon minimální. Fragmenty JavaScriptu obsahují zdroj směřující na Challenge Platform, s cestami začínajícími na /cdn-cgi/challenge-platform/…
Jakmile je JavaScript Detections vložen na HTML stránku, prohlížeč návštěvníka spustí úryvek kódu JavaScript a cf_clearance cookie se návštěvníkovi vydá. Informace z JavaScript Detections se ukládají do cf_clearance cookie a používá se k naplnění js_detection.passed.
- Pokud je návštěvník ověřen a
cf_clearancecookie je vydáno, bude obsahovat výsledek:cf.bot_management.js_detection.passed=true - Pokud ověření selže, bude cookie obsahovat tento výsledek:
cf.bot_management.js_detection.passed=false
Když návštěvník narazí na vlastní pravidlo WAF na vašem webu, pravidlo zkontroluje výsledek cf_clearance cookie. Výsledek cf_clearance cookie určuje, zda požadavek projde, nebo zda je zablokován či vyzván.
Postup pro povolení a vynucení funkce JavaScript Detections najdete v krocích níže.
1. Zapněte JavaScript Detections
Pro zákazníky s Bot Fight Mode JavaScript Detections se aktivuje automaticky a nelze ji deaktivovat.
Pro zákazníky se Super Bot Fight Mode a Bot Management for Enterprise JavaScript Detections je volitelné.
-
V dashboardu Cloudflare přejděte na Security Settings stránce.
Přejděte na Nastavení ↗ -
V konfiguraci plánu provozu botů vyberte ikonu úprav u JS detections a zapněte JavaScript Detections zapnuto.
Další podrobnosti o nastavení ochrany před boty najdete v Dokumentace k botům.
2. Vynuťte spuštění JavaScript Detections
Jakmile aktivujete detekce JavaScriptu, musíte použít cf.bot_management.js_detection.passed pole k vytvoření WAF custom rules (nebo request.cf.botManagement.jsDetection.passed proměnnou v Workers).
Při přidávání tohoto pole do vlastních pravidel WAF se používá na koncových bodech, které očekávají provoz z prohlížeče (nikoli nativní mobilní aplikace nebo websocket koncové body), po prvním požadavku uživatele na vaši aplikaci (Cloudflare potřebuje alespoň jeden HTML požadavek, než vloží JavaScript detekci), a spolu s akcí Managed Challenge, protože existují oprávněné důvody, proč uživatel nemusel projít výzvou JavaScript Detection (problémy se sítí, blokátory reklam, vypnutý JavaScript v prohlížeči, nativní mobilní aplikace).
Předpoklady
- Musíte mít Enterprise Bot Management předplatné.
- Ve vaší zóně musíte mít povolené JavaScript Detections.
- Musíte mít aktualizovali své hlavičky Content Security Policy pro detekce JavaScriptu.
- Toto pole nesmíte používat na websocket koncových bodech.
- Toto pole musíte použít ve výrazu vlastních pravidel, který očekává pouze provoz z prohlížeče.
- Akce by měla vždy být Managed Challenge pro případ, že legitimní uživatel výzvu neobdržel z důvodu sítě nebo prohlížeče.
- Cesta zadaná v rule builderu by nikdy neměla být první HTML stránkou, kterou uživatel při procházení vašeho webu navštíví.
cf.bot_management.js_detection.passed pole by se nikdy nemělo používat ve vlastním pravidle WAF, které odpovídá prvnímu požadavku návštěvníka na web. Aby Cloudflare mohl vložit detekci JavaScriptu, musí nejprve proběhnout alespoň jeden HTML požadavek.
(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
}
}Viz Dokumentace WAF kde najdete další informace o vytváření vlastního pravidla.
API
Pokud zapnete JavaScript Detections přes dashboard, Cloudflare vloží značku script do všech HTML stránek zobrazovaných na vašem webu. Pokud chcete omezit, kde se JavaScript Detections zobrazuje, můžete to udělat pomocí skriptu JavaScript Detections API.
JavaScript Detections API vám poskytuje podrobnější kontrolu nad tím, kdy a kde se JavaScript Detections na vašem webu vloží, a zároveň nabízí možnost zpracování zpětných volání (pro logování nebo další doplňkové akce).
Odkaz na skript můžete explicitně přidat do /cdn-cgi/challenge-platform/scripts/jsd/api.js a váš vlastní kód volající window.cloudflare.jsd.executeOnce na konkrétních HTML stránkách vašeho webu.
Následující skript musí být přidán na každou stránku, na které chcete mít povolené 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>Co zvážit
JavaScript Detections nezaručuje konkrétní skóre robota.
- Pokud se injektáž nebo spuštění JavaScript Detections nezdaří a
cf.bot_management.js_detection.passed=false, samostatná heuristika Bot Management může přesto vygenerovat1nebo vyšší skóre bota, nezávisle na JavaScript Detections. - Pokud JavaScript Detections projde úspěšně, konečné skóre bota může přesto být
1kvůli dalším detekčním heuristikám (například známá škodlivá IP adresa, detekce podle signatury a další), což vede kjs_detection.passed=true, alescore=1.
Omezení
Pokud jste Bot Management zapnuli před červnem 2020
Zákazníci, kteří si aktivovali Enterprise Bot Management před červnem 2020, nemají ve výchozím nastavení zapnuté JavaScript Detections (pokud si je výslovně nevyžádali). I tito zákazníci si ale mohou danou funkci zapnout v Cloudflare dashboardu.
Pokud jde o první požadavek na váš web
První požadavek od nového klienta na váš web nebo aplikaci obvykle nebude mít data JavaScript Detections (cf.bot_management.js_detection.passed = false). Je to proto, že Cloudflare potřebuje alespoň jeden HTML požadavek, než vloží JavaScript Detection a vydá cf_clearance cookie.
Následující požadavky mohou obsahovat cf_clearance cookie, pokud se JavaScript úspěšně spustil.
Pokud máte zásady Content Security Policy (CSP)
Pokud máte Content Security Policy (CSP), musíte podniknout další kroky k implementaci JavaScript Detections:
- Ujistěte se, že vše pod
/cdn-cgi/challenge-platform/je povoleno. Vaše CSP by měla povolovat skripty poskytované z vaší origin domény (script-src self). - Pro
noncetagy script:-
Pokud vaše CSP používá
noncepro značky script, Cloudflare přidá tyto hodnoty nonce ke skriptům, které vkládá, a to na základě analýzy vaší hlavičky odpovědi CSP. -
Pokud vaše CSP nepoužívá
noncepro značky script a JavaScript Detections je povoleno, může se vám zobrazit chyba konzole, napříkladRefused 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.Důrazně nedoporučujeme používatunsafe-inlinea místo toho doporučujeme použít CSPnoncesve značkách script, které analyzujeme a podporujeme v naší CDN.
-
Pokud používáte ETags
Zapnutím JavaScript Detections (JSD) dojde k odstranění ETags z HTML odpovědí, do kterých je vložen JSD.
Pokud váš origin server odesílá no-transform hlavička
Pokud odpověď z originu obsahuje Cache-Control: no-transform direktivy Cloudflare skript JavaScript Detections nevkládá. cf.bot_management.js_detection.passed pole se zobrazí jako missing pro tyto požadavky.
Chcete-li použít JavaScript Detections, odeberte no-transform direktivu z Cache-Control v hlavičkách odpovědí na stránkách, kde má běžet JavaScript Detections. Další informace najdete v Direktivy Cache-Control.