Jak funguje mechanismus CORS a proč je důležitý
Cross-Origin Resource Sharing (CORS) je bezpečnostní mechanismus, který prohlížeče používají k omezení přístupu k prostředkům na jiném původu (origin), než ze kterého pochází samotný webový skript. Tento nástroj pomáhá vývojářům ověřit, zda by webový prohlížeč povolil konkrétní požadavek mezi různými původy na základě poskytnutých HTTP hlaviček odpovědi a podrobností o plánovaném požadavku.
Do nástroje vložíte hlavičky odpovědi, specifikujete původ, metodu a hlavičky vašeho požadavku a určíte, zda jsou zahrnuty přihlašovací údaje. Nástroj následně vyhodnotí shodu s pravidly CORS a zobrazí rozhodnutí prohlížeče spolu s podrobným vysvětlením.
Tento proces je klíčový pro celou řadu specialistů:
- Front-end vývojáři potřebují vědět, zda kód v prohlížeči může úspěšně přečíst konkrétní odpověď ze serveru.
- Back-end vývojáři a vývojáři API platforem ověřují správnost konfigurace odesílaných HTTP hlaviček.
- Provozní vývojáři (DevOps) kontrolují, zda nastavení serverů nebo reverzních proxy správně reaguje na požadavky z jiných domén.
- Nástroj je nepostradatelný pro každého, kdo potřebuje ověřit, zda odpověď na metodu
OPTIONS(preflight) schvaluje následné použití konkrétní metody a požadovaných hlaviček.
Vstupy pro kontrolu zásad CORS
Pro přesnou analýzu vyžaduje nástroj konfiguraci několika parametrů, které simulují chování prohlížeče při odesílání požadavku:
- Odezva na kontrolu: Volba mezi možnostmi "Skutečná odezva" a "Předletová odezva".
- HTTP hlavičky odpovědí: Textové pole pro vložení HTTP hlaviček odpovědi. Maximální délka tohoto vstupu je 200 000 znaků. Pokud je pole prázdné, zobrazí se chyba "Před kontrolou vložte hlavičky HTTP odpovědí.". Při překročení limitu nástroj vrátí chybu "Tato odezva je neobvykle velká. Udržujte jej pod
‹max›znaků.". Pokud řádek neodpovídá standardu, zobrazí se "Řádek‹line›není platná hlavička HTTP nebo stavový řádek." nebo "Řádek‹line›obsahuje neplatný název záhlaví HTTP.". Pro předletové odpovědi je nutné vložit také stavový řádek. - Požádat o původ: Textové pole pro zadání schématu, hostitele a volitelného portu (např.
https://app.example.com). Vstup musí obsahovat pouze čistý původ nebo hodnotunull; cesta URL, parametry dotazu ani přihlašovací údaje nejsou povoleny. V opačném případě se zobrazí chyba "Zadejte původ pouze se schématem, hostitelem a volitelným portu, například https://app.example.com.". - Požadovaná metoda: Textové pole pro HTTP metodu. Neplatný formát vyvolá chybu "Zadejte platný token metody HTTP.". Pokud zadáte zakázanou metodu, nástroj zobrazí "Prohlížeče nepovolují metodu
‹method›v požadavcích fetch.". - Požadované názvy záhlaví: Názvy hlaviček, které se odesílají v hlavičce
Access-Control-Request-Headers, oddělené čárkami nebo novými řádky (např.Content-Type, Authorization). Neplatný název vyvolá chybu "„‹header›“ není platný název záhlaví požadavku HTTP.". - Zahrnout pověření: Přepínač indikující, zda požadavek obsahuje soubory cookie nebo HTTP ověřování.
Výstupy a rozhodnutí prohlížeče
Po spuštění kontroly nástroj zobrazí jeden z následujících stavů rozhodnutí prohlížeče:
- Povoleno vloženou odpovědí CORS.
- Blokováno vloženou odpovědí CORS.
- Záhlaví prošlo, ale stav před výstupem není znám.
- Zadejte odpověď a podrobnosti požadavku a poté zkontrolujte zásady CORS. (pokud chybí vstupy).
- Vložte odpověď a zkontrolujte její zásady CORS. (výchozí stav před analýzou).
Nástroj dále zobrazí sekci Analyzovaná pole řízení přístupu (parsované hlavičky začínající na Access-Control-*) a konkrétní důvody, které k rozhodnutí vedly.
Pravidla vyhodnocování a chování divokých karet
Vyhodnocování CORS podléhá přísným pravidlům, která se liší v závislosti na přítomnosti přihlašovacích údajů (credentials):
| Scénář | Chování hlavičky Access-Control-Allow-Origin |
Chování divokých karet (*) pro metody a hlavičky |
|---|---|---|
| S přihlašovacími údaji | Nesmí obsahovat hodnotu *. Původ musí přesně odpovídat požadujícímu původu. |
Divoké karty pro povolené metody a hlavičky ztrácejí svůj zástupný význam. |
| Bez přihlašovacích údajů | Může obsahovat hodnotu *. |
Hodnotu * lze použít pro Access-Control-Allow-Methods i Access-Control-Allow-Headers (s výjimkou hlavičky Authorization). |
Pokud hlavička Access-Control-Allow-Origin obsahuje více hodnot nebo je oddělená čárkami, je považována za neplatnou. Hlavička Access-Control-Allow-Credentials musí mít pro požadavky s přihlašovacími údaji přesnou hodnotu true.
Specifické chování hlavičky Authorization
Hlavička Authorization má v rámci CORS specifické postavení. I když je v odpovědi přítomna hlavička Access-Control-Allow-Headers: *, tato divoká karta nepokrývá hlavičku Authorization. Ta musí být v hlavičce Access-Control-Allow-Headers vždy uvedena výslovně.
Předletové požadavky (Preflight) a stavové kódy
Předletové požadavky (metoda OPTIONS) slouží k ověření, zda server povoluje skutečný požadavek. Pro úspěšné vyhodnocení předletové kontroly je nezbytný úspěšný HTTP stavový kód z řady 2xx.
Pokud vložená předletová odpověď neobsahuje HTTP stavový řádek, nástroj nemůže ověřit úspěšnost stavu a výsledek kontroly bude označen jako neurčitý ("Záhlaví prošlo, ale stav před výstupem není znám.").
Omezení analýzy a ochrana soukromí
Zpracování vložených dat probíhá lokálně. Vaše záhlaví a podrobnosti požadavků zůstanou ve vašem prohlížeči; do BroBroGo se nic nenahrává ani neukládá.
Nástroj provádí statickou analýzu poskytnutých textových vstupů. Nekontaktuje vzdálené servery, nečte URL adresy, nenastavuje soubory cookie, neprovádí kontrolu DNS/TLS ani nemění konfiguraci serveru.
Úspěšný výsledek kontroly v tomto nástroji garantuje shodu pouze pro konkrétní vloženou odpověď a zadané parametry požadavku. V reálném provozu mohou výsledek ovlivnit další faktory, jako jsou přesměrování, odpovědi uložené v mezipaměti, změny pravidel na serveru, nainstalovaná rozšíření prohlížeče nebo samotná skutečná odpověď odeslaná po úspěšném preflightu.
Často kladené otázky (FAQ)
Mám vložit skutečnou odpověď nebo odpověď před výstupem?
Pomocí funkce Skutečná odpověď zkontrolujte, zda kód prohlížeče dokáže přečíst jednu odpověď. Použijte odpověď Preflight pro odpověď OPTIONS, která schvaluje pozdější metodu a její požadované názvy záhlaví.
Proč může selhat zástupný znak s přihlašovacími údaji?
Pokud jsou zahrnuty soubory cookie nebo ověřování HTTP, musí povolený původ přesně odpovídat požadujícímu původu. Zástupné znaky pro povolené metody a hlavičky také ztrácejí svůj význam.
Dokazuje předaný výsledek, že živý požadavek bude fungovat?
Ne. Tento výsledek zahrnuje pouze vloženou odpověď a zde zadané podrobnosti požadavku. Přesměrování, odpovědi uložené v mezipaměti, změna pravidel serveru, rozšíření prohlížeče a skutečná odpověď po předběžné kontrole mohou stále změnit výsledek.