← Dokumentace WAF / rate-limiting-rules
Osvědčené postupy pro rate limiting
Následující části pokrývají typické konfigurace rate limitingu pro běžné případy použití. Uvedená ukázková pravidla můžete kombinovat a přizpůsobit vlastnímu scénáři.
Hlavní případy použití rate limitingu jsou následující:
- Vynucení granulárního řízení přístupu ke zdrojům. Zahrnuje řízení přístupu podle kritérií jako user agent, IP adresa, referrer, host, země a světový region.
- Ochrana proti credential stuffingu a útoky převzetí účtu (account takeover).
- Omezení počtu operací prováděné jednotlivými klienty. Zahrnuje prevenci scrapingu boty, přístupu k citlivým datům, hromadného zakládání nových účtů a programatického nakupování na e-commerce platformách.
- Ochrana REST API před vyčerpáním zdrojů (cílené DDoS útoky) a zdroje před zneužitím obecně.
- Ochrana GraphQL API tím, že brání přetížení serveru a omezuje počet operací.
Vynucování granulárního řízení přístupu
Omezení podle user agenta
Běžným případem užití je omezení frekvence požadavků prováděných jednotlivými user agenty. Následující ukázkové pravidlo povoluje mobilní aplikaci provést maximálně 100 požadavků za 10 minut. Můžete také vytvořit samostatné pravidlo omezující frekvenci pro desktopové prohlížeče.
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | User Agent se rovná MobileApp |
| Expression | http.user_agent eq "MobileApp" |
| Charakteristiky počítání | IP |
| Frekvence (požadavky / období) | 100 požadavků / 10 minut |
| Akce | Managed Challenge |
Omezení opakovaného použití jednoho cf_clearance cookie
Poté, co návštěvník úspěšně projde Managed Challenge, Cloudflare vydá cf_clearance cookie, která je identifikuje jako ověřené. Škodliví aktéři se však mohou pokusit opakovaně použít nebo sdílet jedinou platnou cf_clearance hodnotu napříč více požadavky nebo zařízeními k obejití dalších challenge.
Toto pravidlo rate limitingu pomáhá mitigovat takové zneužití omezením počtu požadavků se stejným cf_clearance hodnotu v definovaném období. Legitimní lidští uživatelé zůstanou nedotčeni, zatímco automatizované nebo přehrávané požadavky používající jediný clearance token budou po překročení prahu zablokovány.
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | URI Path se rovná /checkout |
| Expression | http.request.uri.path eq "/checkout" |
| Charakteristiky počítání | Cookie (cf_clearance) |
| Frekvence (požadavky / období) | 100 požadavků / 10 minut |
| Akce | Block |
Povolení konkrétních IP adres nebo ASN
Dalším případem použití při řízení přístupu ke zdrojům je vyloučení IP adres nebo čísel autonomních systémů (ASN) z pravidla rate limitingu, případně jejich zahrnutí.
Následující ukázkové pravidlo povoluje až 10 požadavků za minutu ze stejné IP adresy provádějících GET požadavek na /status, pokud IP adresa návštěvníka není zahrnuta v partner_ips IP seznam.
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | URI Path se rovná /status a Request Method se rovná GET a zdrojová IP adresa není v seznamu partner_ips |
| Expression | http.request.uri.path eq "/status" and http.request.method eq "GET" and not ip.src in $partner_ips |
| Charakteristiky počítání | IP |
| Frekvence (požadavky / období) | 10 požadavků / 1 minuta |
| Akce | Managed Challenge |
Omezení podle refereru
Některé aplikace přijímají požadavky pocházející z jiných zdrojů (například využívané reklamami odkazujícími na stránky třetích stran). Můžete chtít omezit počet požadavků generovaných jednotlivými odkazujícími stránkami kvůli správě kvót nebo prevenci nepřímých DDoS útoků.
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | URI Path se rovná /status a Request Method se rovná GET |
| Expression | http.request.uri.path eq "/status" and http.request.method eq "GET" |
| Charakteristiky počítání | Hlavička (Referer) 1 |
| Frekvence (požadavky / období) | 100 požadavků / 10 minut |
| Akce | Block |
Toto ukázkové pravidlo vyžaduje Advanced Rate Limiting.
Omezení podle cílového hostitele
SaaS aplikace nebo zákazníci používající Cloudflare SSL for SaaS mohou mít tisíce hostitelů v rámci jedné zóny, takže vytváření samostatných pravidel pro každého hostitele je nepraktické. To lze vyřešit vytvořením pravidla rate limitingu, které používá hostitele jako charakteristiku pro počítání.
Následující ukázkové pravidlo bude sledovat frekvenci požadavků na /login endpoint pro každý host:
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | URI Path se rovná /login a Request Method se rovná GET |
| Expression | http.request.uri.path eq "/login" and http.request.method eq "GET" |
| Charakteristiky počítání | IP a Host |
| Frekvence (požadavky / období) | 10 požadavků / 10 minut |
| Akce | Block |
Toto ukázkové pravidlo vyžaduje Advanced Rate Limiting.
Ochrana proti credential stuffingu
Typickým případem užití rate limitingu je ochrana přihlašovacího endpointu proti útokům, jako je credential stuffing ↗. Následující příklad obsahuje tři různá pravidla rate limitingu s rostoucími postihy pro klienty odesílající příliš mnoho požadavků.
Pravidlo č. 1
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | Hostname equals example.com a URI Path equals /login a Request Method se rovná POST |
| Expression | http.host eq "example.com" and http.request.uri.path eq "/login" and http.request.method eq "POST" |
| Charakteristiky počítání | IP |
| Increment counter when | URI Path se rovná /login a Method se rovná POST a Response code is in (401, 403) |
| Výraz pro počítání | http.request.uri.path eq "/login" and http.request.method eq "POST" and http.response.code in {401 403} |
| Frekvence (požadavky / období) | 4 požadavky / 1 minuta |
| Akce | Managed Challenge |
Pravidlo č. 2
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | Hostname equals example.com a URI Path equals /login a Request Method se rovná POST |
| Expression | http.host eq "example.com" and http.request.uri.path eq "/login" and http.request.method eq "POST" |
| Charakteristiky počítání | IP |
| Increment counter when | URI Path se rovná /login a Request Method se rovná POST a Response Status Code je v (401, 403) |
| Výraz pro počítání | http.request.uri.path eq "/login" and http.request.method eq "POST" and http.response.code in {401 403} |
| Frekvence (požadavky / období) | 10 požadavků / 10 minut |
| Akce | Managed Challenge |
Pravidlo #3
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | Host equals example.com |
| Expression | http.host eq "example.com" |
| Charakteristiky počítání | IP |
| Increment counter when | URI Path se rovná /login a Request Method se rovná POST a Response Status Code je v (401, 403) |
| Výraz pro počítání | http.request.uri.path eq "/login" and http.request.method eq "POST" and http.response.code in {401 403} |
| Frekvence (požadavky / období) | 20 požadavků / 1 hodina |
| Akce | Blokace na 1 den |
Tato ukázková pravidla vyžadují plán Business nebo vyšší.
Pravidlo č. 1 povoluje až čtyři požadavky za minutu, poté se spustí Managed Challenge. Tato konfigurace dává legitimním zákazníkům několik pokusů rozpomenout se na heslo. Pokud automatizovaný aktér provede několik požadavků, bude tento klient pravděpodobně zablokován nevyřešenou Managed Challenge. Naopak pokud člověk challenge při dosažení limitu pravidla č. 1 obdrží a projde jí, pravidlo č. 2 poskytne další úroveň ochrany a povolí až 10 požadavků během následujících 10 minut. Pro klienty překračující tento druhý práh se uplatní pravidlo č. 3 (nejpřísnější), které klienta zablokuje na jeden den.
Tato tři pravidla mají počítací výraz oddělený od výrazu pravidla (známého také jako mitigační výraz). Když nakonfigurujete samostatný počítací výraz, kritéria shody se použijí pouze při spuštění akce. Do počítacího výrazu můžete zahrnout podmínky založené na stavovém kódu HTTP odpovědi a hlavičkách HTTP odpovědi, a tím integrovat rate limiting s logikou vašeho backendu.
Můžete se také rozhodnout mít dva různé výrazy — počítací výraz a výraz pravidla/mitigace — a definovat tak:
- Požadavky použité k výpočtu frekvence.
- Požadavky, na které byla skutečně uplatněna akce.
Například pravidlo č. 3 počítá frekvenci na základě POST požadavky na /login které vrátily 401 nebo 403 HTTP stavový kód. Když je však rate limit překročen, Cloudflare blokuje každý požadavek na example.com hostitele generované stejnou IP adresou. Více informací o počítacích výrazech najdete v Výpočet frekvence požadavků.
Ochrana OTP a ověřovacích endpointů
Endpointy jednorázových hesel (OTP) a ověřování (jako /api/otp/validate nebo /account/verify) jsou častým cílem brute force útoků. Tyto endpointy jsou obzvlášť citlivé, protože útočníci zkoušejí velké objemy požadavků s různými kódy, aby uhodli platné OTP.
Při konfiguraci rate limitingu pro tyto endpointy se řiďte těmito pokyny:
- Porovnání přesné cesty URI: Výraz pravidla musí odpovídat cestě, na kterou směřuje útočný provoz. Před vytvořením pravidla ověřte cestu v analytice. Pravidlo cílící na
/validate/otpnebude odpovídat požadavkům na/api/otp/validate. - Použití počítání založeného na odpovědích: Počítat pouze požadavky vracející chybové odpovědi (například
401nebo403) abyste rate limitingem nepostihovali legitimní uživatele odesílající platné kódy. - Vhodné nastavení geografických omezení: Pokud omezujete podle země, ověřte, že útočný provoz pochází ze všech zemí, které vidíte v analytice, nikoli jen z jedné.
Následující ukázkové pravidlo chrání endpoint pro validaci OTP počítáním pouze neúspěšných pokusů:
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | URI Path se rovná /api/otp/validate a Request Method se rovná POST |
| Expression | http.request.uri.path eq "/api/otp/validate" and http.request.method eq "POST" |
| Charakteristiky počítání | IP |
| Increment counter when | URI Path se rovná /api/otp/validate a Request Method se rovná POST a Response Status Code je v (401, 403) |
| Výraz pro počítání | http.request.uri.path eq "/api/otp/validate" and http.request.method eq "POST" and http.response.code in {401 403} |
| Frekvence (požadavky / období) | 5 požadavků / 1 minuta |
| Akce | Blokovat na 10 minut |
Výše uvedené ukázkové pravidlo vyžaduje plán Business nebo vyšší.
Pokud váš OTP endpoint vrací 200 pro platné i neplatné kódy (s výsledkem v těle odpovědi), použijte místo toho počítání založené na požadavcích s nižším prahem:
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | URI Path se rovná /api/otp/validate a Request Method se rovná POST |
| Expression | http.request.uri.path eq "/api/otp/validate" and http.request.method eq "POST" |
| Charakteristiky počítání | IP |
| Frekvence (požadavky / období) | 10 požadavků / 1 minuta |
| Akce | Managed Challenge |
Omezení počtu operací
Rate limiting můžete použít k omezení počtu operací prováděných klientem. Konkrétní pravidlo poskytující tuto ochranu bude záviset na vaší aplikaci. Následující příklady se věnují scraping obsahu ↗ přes query string parametry nebo JSON tělo.
Zabránění scrapingu obsahu (přes query string)
V tomto příkladu klienti provádějí operace (například vyhledávání cen a přidávání do košíku) na e-commerce webu pomocí různých parametrů query stringu. Typický požadavek odeslaný klientem by mohl vypadat například takto:
GET https://store.com/merchant?action=lookup_price&product_id=215
Cookie: session_id=12345Váš bezpečnostní tým může zvážit nastavení limitu počtu vyhledání cen jedním klientem, aby boti — kteří mohli uniknout Cloudflare Bot Managementu — nescrapovali celý katalog obchodu.
Pravidlo č. 1
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | URI Path se rovná /merchant a URI Query String contains action=lookup_price |
| Expression | http.request.uri.path eq "/merchant" and http.request.uri.query contains "action=lookup_price" |
| Charakteristiky počítání | IP |
| Frekvence (požadavky / období) | 10 požadavků / 2 minuty |
| Akce | Managed Challenge |
Pravidlo č. 2
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | URI Path se rovná /merchant a URI Query String contains action=lookup_price |
| Expression | http.request.uri.path eq "/merchant" and http.request.uri.query contains "action=lookup_price" |
| Charakteristiky počítání | IP |
| Frekvence (požadavky / období) | 20 požadavků / 5 minut |
| Akce | Block |
Tato dvě pravidla rate limitingu odpovídají požadavkům provádějícím vybranou akci (v tomto příkladu vyhledání ceny) a používají IP jako počítací charakteristiku. Podobně jako u předchozí /login příklad, obě pravidla pomohou snížit falešně pozitivní detekce v případě vytrvalých (ale legitimních) návštěvníků.
Chcete-li omezit vyhledávání konkrétního product_id přes query string parametr, můžete tento konkrétní query parametr přidat jako počítací charakteristiku, takže se limit počítá ze všech požadavků bez ohledu na klienta. Následující ukázkové pravidlo omezuje počet vyhledávání pro každý product_id na 50 požadavků za 10 sekund.
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | URI Path se rovná /merchant |
| Expression | http.request.uri.path eq "/merchant" |
| Charakteristiky počítání | Query (product_id) |
| Frekvence (požadavky / období) | 50 požadavků / 10 sekund |
| Akce | Block |
Toto ukázkové pravidlo vyžaduje Advanced Rate Limiting.
Stejný vzorec pravidel rate limitingu můžete použít k ochraně aplikací zpracovávajících rezervace a objednávky.
Zabránění scrapingu obsahu (přes tělo)
Představte si aplikaci, která zpracovává operaci a její parametry přes tělo požadavku ve formátu JSON. Například lookup_price operace může vypadat například takto:
POST https://api.store.com/merchant
Cookie: session_id=12345
Body:
{
"action": "lookup_price",
"product_id": 215
}V tomto scénáři byste mohli napsat pravidlo omezující počet akcí z jednotlivých relací:
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | URI Path se rovná /merchant a JSON String action equals lookup_price |
| Expression | http.request.uri.path eq "/merchant" and lookup_json_string(http.request.body.raw, "action") eq "lookup_price" |
| Charakteristiky počítání | Cookie (session_id) |
| Frekvence (požadavky / období) | 10 požadavků / 2 minuty |
| Akce | Managed Challenge |
Toto ukázkové pravidlo vyžaduje Advanced Rate Limiting a inspekci payloadů.
Mohli byste také omezit počet vyhledání každého product_id bez ohledu na klienta, který požadavky odesílá, nasazením pravidla jako je následující:
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | URI Path se rovná /merchant a JSON pole action equals lookup_price |
| Expression | http.request.uri.path eq "/merchant" and lookup_json_string(http.request.body.raw, "action") eq "lookup_price" |
| Charakteristiky počítání | Pole JSON (product_id) |
| Frekvence (požadavky / období) | 50 požadavků / 10 sekund |
| Akce | Block |
Toto ukázkové pravidlo vyžaduje Advanced Rate Limiting a inspekci payloadů.
Omezení požadavků od botů
Obecným přístupem k identifikaci provozu botů je omezit pomocí rate limitingu požadavky, které vyvolávají velký objem 403 nebo 404 stavových kódů odpovědí z origin serveru. To obvykle značí automatizovanou aktivitu scrapovacích aplikací.
V takové situaci byste mohli nakonfigurovat pravidlo podobné následujícímu:
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | Hostname equals example.com |
| Expression | http.host eq "example.com" |
| Charakteristiky počítání | IP |
| Increment counter when | Response Status Code is in (403, 404) |
| Výraz pro počítání | http.response.code in {403 404} |
| Frekvence (požadavky / období) | 5 požadavků / 3 minuty |
| Akce | Managed Challenge |
Toto ukázkové pravidlo vyžaduje plán Business nebo vyšší.
K řízení frekvence akcí prováděných automatizovanými zdroji zvažte použití pravidel rate limitingu společně s Bot Management. S Bot Managementem můžete použít bot score jako součást kritérií shody, aby se pravidlo uplatnilo pouze na automatizovaný nebo pravděpodobně automatizovaný provoz. Můžete například použít maximální skóre (neboli práh) 30 pro pravděpodobně automatizovaný provoz a 10 pro automatizovaný provoz.
Pokud vaše aplikace sleduje sessions pomocí cookie, můžete tuto cookie použít k nastavení kontextu rate limitingu (tedy jako počítací charakteristiku). Nastavením charakteristiky rate limitingu na Cookie pravidlo seskupí požadavky z různých IP adres, ale patřící ke stejné session, což je běžný scénář při distribuovaném útoku botnetu.
Pravidlo č. 1
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | Bot Score less than 30 and URI Query String contains action=delete |
| Expression | cf.bot_management.score lt 30 and http.request.uri.query contains "action=delete" |
| Charakteristiky počítání | Cookie (session_id) |
| Frekvence (požadavky / období) | 10 požadavků / 1 minuta |
| Akce | Managed Challenge |
Pravidlo č. 2
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | Bot Score less than 10 and URI Query String contains action=delete |
| Expression | cf.bot_management.score lt 10 and http.request.uri.query contains "action=delete" |
| Charakteristiky počítání | Cookie (session_id) |
| Frekvence (požadavky / období) | 20 požadavků / 5 minut |
| Akce | Block |
Tato ukázková pravidla vyžadují Advanced Rate Limiting a Bot Management.
Pokud aplikace nepoužívá session cookie, můžete použít JA3 fingerprinty k identifikaci jednotlivých klientů. JA3 fingerprint je unikátní identifikátor dostupný zákazníkům s Bot Management, který Cloudflare umožňuje identifikovat požadavky přicházející od stejného klienta. Všichni klienti mají přiřazený fingerprint bez ohledu na to, zda jsou automatizovaní, či nikoli.
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | URI Path se rovná /merchant a Bot Score nižší než 10 |
| Expression | http.request.uri.path eq "/merchant" and cf.bot_management.score lt 10 |
| Charakteristiky počítání | JA3 Fingerprint |
| Frekvence (požadavky / období) | 10 požadavků / 1 minuta |
| Akce | Managed Challenge |
Toto ukázkové pravidlo vyžaduje Advanced Rate Limiting a Bot Management.
Ochrana REST API
API mohou výrazně zatěžovat backend aplikace, protože API požadavky mohou být výpočetně nebo obslužně nákladné. Tyto požadavky mohou také vyžadovat složité operace (jako zpracování dat a rozsáhlá vyhledávání v datech), které při zneužití mohou origin server nakonec položit.
Prevence volumetrických útoků
Advanced Rate Limiting dokáže mitigovat mnoho typů volumetrických útoků, jako jsou DDoS útoky, mass assignment a exfiltrace dat.
Častým požadavkem je omezit POST akce. Pro autentizovaný provoz můžete použít API Discovery k určení vhodné frekvence požadavků pro jednotlivé endpointy a poté vytvořte pravidlo rate limitingu podobné následujícímu:
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | URI Path se rovná /endpoint1 a Request Method se rovná POST |
| Expression | http.request.uri.path eq "/endpoint1" and http.request.method eq "POST" |
| Charakteristiky počítání | Hlavička (x-api-key) |
| Frekvence (požadavky / období) | Dle návrhu API Discovery nebo dle posouzení analýzou minulého provozu. |
| Akce | Block |
Toto ukázkové pravidlo vyžaduje Advanced Rate Limiting. API Discovery vyžaduje dodatečnou licenci.
Počítací charakteristikou může být jakákoli hlavička, klíč, token, cookie, parametr query, nebo dokonce pole JSON těla, protože některá API zahrnují session ID nebo user ID jako součást JSON těla. Další informace najdete v následujících částech:
- Pokud je váš unikátní identifikátor v URI cestě, podívejte se na Ochrana zdrojů.
- Pokud je váš unikátní identifikátor v JSON těle, podívejte se na Zabránění scrapingu obsahu (přes tělo).
Ochrana zdrojů
GET požadavky mohou také nadměrně zatěžovat aplikaci nebo mít dopad na nákladné zdroje, jako je šířka pásma. Představte si například aplikaci s velkým množstvím uložených souborů (například obrázků), kde si klienti mohou stáhnout soubor přístupem na jeho konkrétní URL:
GET https://api.store.com/files/<FILE_ID>
Header: x-api-key=9375Pravděpodobně chcete omezit počet stažení, abyste zabránili zneužití, ale vzhledem k velikosti datového úložiště nechcete psát samostatná pravidla pro každý soubor. V takovém případě můžete napsat pravidlo jako toto:
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | Hostname equals api.example.com a Request Method se rovná GET |
| Expression | http.host eq "api.example.com" and http.request.method eq "GET" |
| Charakteristiky počítání | Path |
| Frekvence (požadavky / období) | Dle návrhu API Discovery nebo dle posouzení analýzou minulého provozu. |
| Akce | Block |
Toto ukázkové pravidlo vyžaduje Advanced Rate Limiting.
Pravidlo definuje limit 10 stažení za 10 minut pro každý soubor pod https://api.store.com/files/*. Použitím Path jako charakteristiky pravidla se vyhnete nutnosti psát nové pravidlo pokaždé, když se objeví nový nahraný soubor s jiným <FILE_ID>. S tímto pravidlem se limit počítá na každý požadavek bez ohledu na zdrojovou IP nebo identifikátor session.
Path můžete také zkombinovat s x-api-key hlavičku (nebo IP, pokud nemáte klíč ani token) k nastavení maximálního počtu stahování, která smí provést konkrétní klient identifikovaný pomocí x-api-key, může s daným souborem provést:
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | Hostname equals api.store.com a Request Method se rovná GET |
| Expression | http.host eq "api.example.com" and http.request.method eq "GET" |
| Charakteristiky počítání | Cesta a hlavička (x-api-key) |
| Frekvence (požadavky / období) | Dle návrhu API Discovery nebo dle posouzení analýzou minulého provozu. |
| Akce | Block |
Toto ukázkové pravidlo vyžaduje Advanced Rate Limiting.
Ochrana GraphQL API
Prevence přetížení serveru u GraphQL API se může lišit od prevence přetížení u RESTful API. Jednou z největších výzev aplikací postavených na GraphQL je, že všechny dotazy na server obsluhuje jediná cesta a každý požadavek je obvykle POST operaci. To znemožňuje různé rate limity pro různé případy užití API podle HTTP metody a cesty URI.
Na rozdíl od RESTful API, kde se používá metoda a cesta, je účel požadavku obvykle vložen v jeho těle, které obsahuje informace o tom, jaká data chce klient načíst nebo změnit (podle Terminologie GraphQL ↗ pro úpravu dat na straně serveru), spolu s dalšími daty potřebnými k provedení akce.
Abyste předešli přetížení serveru, zvažte následující přístupy:
- Omezte, kolikrát může konkrétní uživatel volat stejný název GraphQL operace.
- Omezte celkovou složitost dotazů, kterou smí daný uživatel požadovat.
- Omezte složitost dotazu každého jednotlivého požadavku.
Následující příklady vycházejí z aplikace, která přijímá recenze filmů. GraphQL požadavek by mohl vypadat takto:
POST https://moviereviews.example.com/graphql
Cookie: session_id=12345
Body:
{
"data": {
"createReview": {
"stars": 5,
"commentary": "This is a great movie!"
}
}
}Omezení počtu operací
K omezení frekvence akcí byste mohli použít následující pravidlo:
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | URI Path se rovná /graphql a Body contains createReview |
| Expression | http.request.uri.path eq "/graphql" and http.request.body.raw contains "createReview" |
| Charakteristiky počítání | Cookie (session_id) |
| Frekvence (požadavky / období) | 5 požadavků / 1 hodina |
| Akce | Block |
Toto ukázkové pravidlo vyžaduje Advanced Rate Limiting a inspekci payloadů.
Omezení celkové složitosti dotazů
Složitost potřebná ke zpracování GraphQL požadavku se může výrazně lišit. Protože API používá jediný endpoint, je obtížné zjistit složitost každého požadavku dříve, než je obsloužen.
K ochraně origin serveru před vyčerpáním zdrojů nepotřebujete omezovat počet požadavků, ale množství složitosti nutné k obsluze jednoho klienta za určité období. Cloudflare Rate Limiting vám umožňuje vytvářet pravidla, která sledovat složitost v čase a blokovat další požadavky po dosažení rozpočtu nebo limitu složitosti.
Tento typ rate limitingu vyžaduje, aby server každý obsloužený požadavek oskóroval podle jeho komplexity. Server navíc musí toto skóre přidat do odpovědi jako HTTP hlavičku. Mechanismus rate limitingu pak tuto informaci použije k aktualizaci rozpočtu daného klienta.
Například následující pravidlo definuje celkový rozpočet složitosti 1 000 za hodinu:
| Nastavení | Hodnota |
|---|---|
| Kritéria shody | URI Path contains /graphql |
| Expression | http.request.uri.path eq "/graphql" |
| Charakteristiky počítání | Cookie (session_id) |
| Skóre za období | 1,000 |
| Období | 1 hodina |
| Response header name | score |
| Akce | Block |
Toto ukázkové pravidlo vyžaduje Advanced Rate Limiting a inspekci payloadů.
Když origin server zpracuje požadavek, přidá score HTTP hlavičku do odpovědi s hodnotou vyjadřující, kolik práce origin s jejím zpracováním měl — například 100. V následující hodině může stejný klient provádět požadavky až do dodatečného rozpočtu 900. Jakmile je tento rozpočet překročen, další požadavky budou blokovány, dokud nevyprší timeout.
Omezení složitosti jednotlivého dotazu
Zákazníci API Shield mohou k ochraně svých GraphQL API použít ochranu proti škodlivým GraphQL dotazům. Ta skenuje váš GraphQL provoz a hledá dotazy, které by mohly přetížit váš origin a způsobit odepření služby. Můžete vytvářet pravidla omezující hloubku a velikost příchozích GraphQL dotazů, a blokovat tak podezřele velké nebo složité dotazy.
Viz Dokumentace API Shield ↗ s dalšími informacemi o ochraně proti škodlivým GraphQL dotazům.
Poznámky pod čarou
-
Název HTTP hlavičky používá chybný pravopis slova "referrer". ↩