Začněte tím, že oddělíte dvě věci, které se změnily najednou: síťovou cestu a vynucování v prohlížeči. VPN mění výstupní adresu; nemění původ stránky, který se skládá ze schématu, hostitele a portu. Pokud požadavek nyní uspěje, něco se změnilo v odpovědi, nebo se změnil samotný požadavek. Zjistit, co z toho, je celé vyšetřování.

CORS je protokol hlaviček, který vynucuje prohlížeč, takže nic na síťové cestě ho nemůže vypnout.

Původ není IP adresa

Původ je schéma, hostitel a port. Není to adresa, ze které odcházejí pakety, a není to IP, kterou vidí server. Proto VPN může změnit každou pozorovatelnou adresu a původ ponechat stejný. Prohlížeč porovnává Access-Control-Allow-Origin z odpovědi s původem stránky a výstupní adresa do tohoto srovnání nikdy nevstupuje.

Rozšíření nebo proxy, které vypadá, že opravuje chybu CORS, tedy dělá něco jiného: přepisuje hlavičky, nebo směruje požadavek tak, že už není křížového původu. Ani jedno není vlastností VPN.

Co prohlížeč skutečně posílá

U požadavku křížového původu, který není jednoduchý, prohlížeč nejprve pošle předběžnou kontrolu OPTIONS s plánovanou metodou a hlavičkami. Server musí odpovědět oprávněními, která povoluje, a skutečný požadavek následuje jen tehdy, pokud tato odpověď splňuje pravidla. VPN mění cestu, která nese obě výměny, a může změnit, co odpovídají mezilehlé služby. Nemění řetězec původu ani požadavek předběžné kontroly.

Klient z příkazového řádku obvykle nic z toho neukáže. Možná neposílá hlavičku Origin, často přeskakuje předběžnou kontrolu a může nést jiné přihlašovací údaje. Tělo vrácené curl dokazuje, že server odpověděl curl.

Najděte odpověď, která se změnila

Porovnejte skutečnou odpověď na každé cestě, ne jen stavový kód. Podívejte se na hlavičky nesoucí oprávnění CORS, typ obsahu, případné přesměrování a zda varianta WAF nebo CDN nevytvořila jinou stránku. Regionální odmítnutí, přesměrování na přihlášení nebo chybová stránka bez hlavičky oprávnění selhávají v prohlížeči, přitom vypadají jako chyba CORS. To jsou rozdíly v doručovací cestě a právě ty je třeba zdokumentovat.

Zachyťte hlavičky odpovědi z obou cest a porovnejte je řádek po řádku. Pokud je jediným rozdílem chybějící Access-Control-Allow-Origin na jedné chybové stránce, našli jste příčinu.

Opravte službu, ne vynucování

Když je služba vaše, výslovně uveďte povolené původy a vlastnosti požadavku a pak čtěte chyby, které vytváří její frontend a prostředníci. Pokud to neuděláte, pošlete vlastníkovi služby očištěné srovnání. Nikdy do té zprávy nezařazujte cookies, autorizační hlavičky ani exporty relací, protože to jsou přihlašovací údaje, které má politika chránit.

Vyhněte se rozšířením prohlížeče, která vypínají CORS. Mění bezpečnostní hranici, přitom skrývají rozdíl v odpovědi, který bylo třeba vysvětlit, a stejné selhání nechávají na místě pro každého dalšího uživatele.

Zaznamenejte obě odpovědi, použitý původ a absolvovanou cestu. Tento záznam mění pověst o VPN v chybu služby.

Související články