Porozumenie politike Cross-Origin Resource Sharing (CORS)
Cross-Origin Resource Sharing (CORS) je bezpečnostný mechanizmus, ktorý prehliadače používajú na obmedzenie prístupu k zdrojom umiestneným na inom pôvode (origin), než z akého pochádza spustený skript. Pôvod je definovaný kombináciou schémy, hostiteľa a voliteľného portu. Ak webová aplikácia odosiela požiadavku na iné rozhranie API, prehliadač vyhodnocuje HTTP hlavičky odpovede servera, aby určil, či je čítanie týchto údajov bezpečné.
Tento nástroj pomáha overiť, či webový prehliadač povolí konkrétnu požiadavku z iného pôvodu na základe poskytnutých HTTP hlavičiek odpovede a podrobných parametrov požiadavky. Vývojári na front-ende, back-ende, správcovia API platforiem a DevOps inžinieri môžu pomocou neho analyzovať správanie prehliadača bez nutnosti manuálneho testovania v konzole.
Úloha hlavičky Access-Control-Allow-Origin
Kľúčovým prvkom CORS politiky je hlavička Access-Control-Allow-Origin. Táto hlavička určuje, ktorému pôvodu je povolené čítať odpoveď servera. Nástroj analyzuje túto hlavičku a porovnáva ju s hodnotou zadanou v poli Pôvod požiadavky.
Pri vyhodnocovaní môžu nastať nasledujúce stavy a rozhodnutia:
- Presná zhoda: Ak sa hodnota hlavičky zhoduje s požadovaným pôvodom, uplatní sa pravidlo: "Access-Control-Allow-Origin presne zodpovedá
‹origin›." - Divoká karta (Wildcard): Ak hlavička obsahuje znak
*, uplatní sa pravidlo: "Access-Control-Allow-Origin umožňuje akýkoľvek pôvod tejto žiadosti." - Chýbajúca hlavička: Ak server túto hlavičku nevráti, uplatní sa pravidlo: "Access-Control-Allow-Origin chýba."
- Nezhoda pôvodov: Ak sa vrátená hodnota nezhoduje s očakávanou, uplatní sa pravidlo: "Access-Control-Allow-Origin je
‹actual›, nie‹expected›." - Neplatná hodnota: Ak hlavička obsahuje viacero hodnôt alebo je oddelená čiarkami, považuje sa za neplatnú a uplatní sa pravidlo: "Access-Control-Allow-Origin má neplatnú hodnotu:
‹value›."
Vplyv prihlasovacích údajov na CORS
Ak požiadavka zahŕňa cookies alebo HTTP autentifikáciu, správanie CORS pravidiel sa výrazne sprísňuje. V nástroji sa táto situácia simuluje aktivovaním voľby Zahrňte preukazy.
Pri požiadavkách s prihlasovacími údajmi platia tieto striktné pravidlá:
- Zákaz divokej karty: Hlavička
Access-Control-Allow-Originnesmie obsahovať hodnotu*. Ak ju obsahuje, uplatní sa pravidlo: "Access-Control-Allow-Origin nemôže byť *, keď sú zahrnuté prihlasovacie údaje." - Vyžadovanie explicitného schválenia: Prehliadač vyžaduje prítomnosť hlavičky
Access-Control-Allow-Credentialss presnou hodnotoutrue. Ak je táto podmienka splnená, uplatní sa pravidlo: "Access-Control-Allow-Credentials je presne pravda." Ak chýba alebo nemá hodnotutrue, uplatní sa pravidlo: "Žiadosť o oprávnenie vyžaduje Access-Control-Allow-Credentials: pravda." - Strata významu divokej karty: Pri zahrnutí prihlasovacích údajov strácajú divoké karty (
*) v hlavičkách pre povolené metódy a hlavičky svoj význam žolíka a interpretujú sa doslovne.
Ak požiadavka neobsahuje prihlasovacie údaje, uplatní sa pravidlo: "Kvalifikácie nie sú zahrnuté, takže Access-Control-Allow-Credentials toto rozhodnutie neovplyvňuje."
Predletové požiadavky (Preflight) a HTTP statusy
Pred odoslaním určitých požiadaviek (napr. pri použití neštandardných HTTP metód alebo vlastných hlavičiek) prehliadač najprv odošle predbežnú požiadavku typu OPTIONS. Tento proces sa overuje prepnutím voľby Odpoveď na kontrolu na hodnotu Odpoveď na predbežnú požiadavku.
Pre úspešné overenie predletovej odpovede je nevyhnutný správny HTTP stavový kód. Nástroj vyžaduje vloženie stavového riadku spolu s hlavičkami. Rozhodnutia sa riadia týmito pravidlami:
- Úspešný stav: Ak je stavový kód z úspešného rozsahu 2xx, uplatní sa pravidlo: "Predletový stav ‹status› je úspešný."
- Neúspešný stav: Ak kód nie je z rozsahu 2xx, uplatní sa pravidlo: "Predletový stav
‹status›nie je úspešný 2xx status." - Chýbajúci stavový riadok: Ak nevložíte stavový riadok, výsledok predletovej kontroly bude neurčitý a uplatní sa pravidlo: "Žiadny HTTP stavový riadok nebol vložený, takže požadovaný 2xx predletový stav nemožno skontrolovať."
Overovanie metód a hlavičiek v predletových odpovediach
Počas predletovej kontroly prehliadač overuje, či server povoľuje požadovanú HTTP metódu a vlastné hlavičky požiadavky.
HTTP metódy
Nástroj porovnáva hodnotu v poli Požadovaná metóda s hlavičkou Access-Control-Allow-Methods.
- Ak je metóda povolená, uplatní sa pravidlo: "Predletová kontrola
‹method›." - Ak ide o štandardnú bezpečnú metódu (CORS-safelisted), uplatní sa pravidlo: "
‹method›je metóda CORS-safelisted a nemusí sa objavovať v Access-Control-Allow-Methods." - Ak metóda nie je povolená, uplatní sa pravidlo: "Access-Control-Allow-Methods nepovoľuje
‹method›." - Prehliadače majú interné obmedzenia; ak zadáte zakázanú metódu, zobrazí sa chyba: "Prehliadače neumožňujú metódu
‹method›pri načítavacích požiadavkách."
Hlavičky požiadaviek
Názvy hlavičiek zadané v poli Požadované názvy hlavičiek sa overujú voči hlavičke Access-Control-Allow-Headers.
- Ak nie sú vyžadované žiadne špeciálne hlavičky, platí: "Žiadne požadované názvy hlavičiek nepotrebujú predletové schválenie."
- Pri úspešnom schválení platí: "Predletová kontrola umožňuje požadované názvy hlavičiek:
‹headers›." - Ak sa použije divoká karta bez prihlasovacích údajov, platí: "Access-Control-Allow-Headers: * pokrýva tieto mená pre žiadosť bez prihlasovacích údajov:
‹headers›." - Ak hlavičky nie sú povolené, platí: "Access-Control-Allow-Headers neumožňuje:
‹headers›."
Špecifické správanie hlavičky Authorization
Hlavička Authorization podlieha osobitnému režimu. Aj v prípade, že server vráti divokú kartu Access-Control-Allow-Headers: *, táto divoká karta nepokrýva hlavičku Authorization. Táto hlavička musí byť v Access-Control-Allow-Headers uvedená explicitne, inak sa uplatní pravidlo: "Authorization musia byť explicitne uvedené; Access-Control-Allow-Headers: * to nepokrýva."
Limity kontroly a spracovanie údajov
Spracovanie všetkých zadaných údajov prebieha lokálne priamo vo vašom webovom prehliadači. Žiadne HTTP hlavičky, adresy pôvodu ani detaily o požiadavkách sa nenahrávajú na servery BroBroGo ani sa na nich neukladajú.
Nástroj vykonáva statickú analýzu poskytnutých textových vstupov. Nekontaktuje vzdialené servery, nenačítava URL adresy, nenastavuje cookies, neoveruje DNS záznamy ani TLS certifikáty a nijakým spôsobom neupravuje konfiguráciu servera.
Úspešný výsledok analýzy indikuje iba to, že predložené hlavičky a parametre vyhovujú pravidlám CORS. Tento výsledok nezohľadňuje prípadné presmerovania, cache odpovede, dynamické zmeny pravidiel na serveri, vplyv nainštalovaných rozšírení v prehliadači ani skutočnú odpoveď, ktorú server vráti po vykonaní predletovej požiadavky.
Často kladené otázky (FAQ)
Mám vložiť skutočnú odpoveď alebo predletovú odpoveď?
Použite Skutočnú odpoveď na overenie, či kód prehliadača dokáže prečítať jednu odpoveď. Použite predbežnú odpoveď pre OPTIONS odpoveď, ktorá schvaľuje neskoršiu metódu a jej požadované názvy hlavičiek.
Prečo môže wildcard zlyhať s prihlasovacími údajmi?
Keď sú zahrnuté cookies alebo HTTP autentifikácia, povolený pôvod musí presne zodpovedať požadovanému pôvodu. Žolíky pre povolené metódy a hlavičky tiež strácajú svoj význam žolíka.
Dokazuje úspešný výsledok, že živá požiadavka bude fungovať?
Nie. Tento výsledok pokrýva iba vloženú odpoveď a údaje o žiadosti zadané tu. Presmerovania, uložené odpovede, zmeny pravidiel servera, rozšírenia prehliadača a samotná odpoveď po predbežnom teste môžu stále zmeniť výsledok.
Aká je maximálna veľkosť hlavičiek, ktoré môžem skontrolovať?
Vstup pre HTTP hlavičky odpovede je obmedzený na maximálne 200 000 znakov. Pri prekročení tohto limitu nástroj zobrazí chybové hlásenie upozorňujúce na príliš veľký rozsah vstupu.