← Cloudflare Cache / cache / troubleshooting
Dynamický obsah a problémy s přihlašováním
Dynamické stránky, jako jsou přihlašovací formuláře, průběh objednávky nebo cesty autentizované aplikace, se mohou při příliš agresivním cachování přestat správně chovat.
Mezi časté příznaky patří:
- Uživatelé mohou načíst přihlašovací stránku, ale po odeslání přihlašovacího formuláře dojde k chybě.
- Relace se po úspěšném přihlášení neuchovávají.
- Origin odesílá
Set-Cookiehlavičku, ale prohlížeč cookie nikdy neuloží. - Zobrazí se stránka s challenge, ale po jejím vyřešení se uživatel vrátí na přihlašovací stránku nebo přijde o stav formuláře.
Přihlašovací stránka uložená v mezipaměti odstraňuje cookies relace
Jednou z častých příčin je Cache Rule nebo starší Page Rule nastavené pro cachování dynamického HTML.
K tomu obvykle dochází, pokud platí všechny následující podmínky:
- Stránka je nakonfigurována jako Způsobilé pro cache nebo Cache Everything.
- Odpověď je dynamické HTML, například
/loginnebo/account. - Origin odesílá
Set-Cookiehlavička. - Edge TTL nebo TTL podle stavového kódu má přednost před direktivami cache z originu.
Při tomto nastavení může Cloudflare odpověď uložit do mezipaměti a odstranit Set-Cookie hlavičku ještě předtím, než se odpověď uloží na edge. Prohlížeč proto obdrží přihlašovací stránku, ale nikdy nezíská cookie relace, kterou potřebuje pro další požadavek.
Jak to ověřit
Zkontrolujte odpověď pro přihlašovací stránku nebo jinou dynamickou trasu.
Pokud platí obě následující podmínky, je stránka pravděpodobně uložena v mezipaměti, i když by neměla být:
CF-Cache-Status: HITneboCF-Cache-Status: EXPIRED- Ne
Set-Cookiehlavičku v odpovědi, i když ji váš origin obvykle nastavuje
Po odeslání formuláře se také mohou objevit chyby specifické pro daný framework, například:
- Přesměrování zpět na přihlašovací stránku
-
403nebo500po přihlášení - Chyby ověření CSRF
- Chybějící stav relace na straně serveru
Tento problém se často vyskytuje u frameworků, které při prvním načtení stránky spoléhají na session nebo CSRF cookie, včetně JavaServer Faces, ASP.NET, PHP session handlerů, Django, Rails a Laravel.
Řešení
Neukládejte do cache přihlašovací stránky ani jiný autentizovaný HTML obsah.
Místo toho:
- Omezit Způsobilé pro cache nebo Cache Everything pouze na statické cesty.
- Přidejte konkrétnější pravidlo Cache Rule, které obchází nebo zakazuje ukládání do mezipaměti pro cesty jako
/login,/account,/cart,/checkout, a cesty API aplikace. - Pokud má ukládání do mezipaměti řídit origin server, odstraňte veškeré přepsání Edge TTL, které vynucuje ukládání stránky do mezipaměti.
- Ověřte, že opravená odpověď nyní vrací
CF-Cache-Status: DYNAMIC,MISS, neboBYPASS, a zachováváSet-Cookie.
Další informace o chování cookies najdete v části Interakce hlavičky odpovědi Set-Cookie s mezipamětí.
Smyčky challenge při přihlašování nebo v procesu vyplňování formulářů
Bezpečnostní kontroly mohou také narušit dynamické procesy.
Dva běžné vzory jsou:
- Challenge se spustí na počáteční
GETpožadavek na přihlašovací stránku. Uživatel výzvu vyřeší, ale aplikace ztratí původní relaci nebo kontext CSRF. - Challenge se spustí na
POSTpožadavek, který odešle přihlašovací formulář nebo jinou citlivou akci. Prohlížeč může požadavek po výzvě zopakovat, což může narušit původní odeslání formuláře.
Jak to ověřit
Zkontrolujte, zda Vlastní pravidlo WAF, spravované pravidlo, nebo pravidlo pro omezení frekvence platí pro přihlašovací cestu.
Pokud se problém týká pouze cest jako /login, /signin, /checkout, nebo /api/auth/*, a aplikace funguje, když je challenge pro tyto cesty vypnutá, challenge pravděpodobně narušuje průběh procesu.
Řešení
Použijte jeden z následujících postupů:
- Z pravidla challenge vylučte cestu pro přihlášení nebo odeslání formuláře.
- Zužte výraz pravidla tak, aby se vztahoval pouze na podezřelý provoz.
- Pokud potřebujete danou cestu chránit, použijte při načtení stránky méně rušivou kontrolu a přísnější opatření uplatněte až v dalších krocích procesu.
Při ladění také ověřte, že pravidla neodpovídají cestám generovaným Cloudflare, jako je /cdn-cgi/*.
Další informace o chování souvisejícím s challenge najdete v části Řešení problémů s pravidly a Řešení problémů s Cloudflare WAF.