A Cross-Origin Resource Sharing (CORS) szabályzat működése
A modern webes biztonsági architektúra alapvető eleme a Cross-Origin Resource Sharing (CORS) szabályrendszer. A böngészők alapértelmezés szerint korlátozzák a különböző eredetek (origin) közötti HTTP-kéréseket, hogy megvédjék a felhasználókat a jogosulatlan adathozzáférésektől. Amikor egy kliensoldali alkalmazás egy másik tartományon található erőforrást próbál elérni, a böngésző a szerver által küldött HTTP-válaszfejlécek alapján dönti el, hogy az alkalmazás hozzáférhet-e a válaszhoz.
A CORS szabályzat kiértékelése során a böngésző megvizsgálja a kérés paramétereit — például a kérést indító eredetet, a használt HTTP-metódust, a kért egyedi fejléceket, valamint a hitelesítő adatok jelenlétét —, majd ezeket összeveti a szerver válaszában található Access-Control-* fejlécekkel. Ha a szerver által visszaadott szabályok nem egyeznek meg a kérés tulajdonságaival, a böngésző blokkolja a válasz beolvasását, még akkor is, ha a hálózati kérés egyébként sikeresen lezajlott.
A CORS Ellenőrző bemeneti paraméterei
A CORS Ellenőrző eszköz segítségével pontosan elemezhető, hogy egy adott böngésző engedélyezni fog-e egy tervezett cross-origin kérést a megadott válaszfejlécek alapján. A kiértékeléshez az alábbi bemeneti mezők kitöltése szükséges:
- Válasz az ellenőrzésre: Kiválasztható a Valós válasz vagy a Repülés előtti válasz opció.
- HTTP válaszfejlécek: Ide kell beilleszteni a vizsgálni kívánt HTTP-válaszfejléceket. Ha előzetes ellenőrzést (preflight) vizsgál, az állapotsort is be kell illesztenie. A beviteli mező maximális hossza 200 000 karakter. Ha a mező üres, az "Az ellenőrzés előtt illessze be a HTTP válaszfejléceket." hibaüzenet jelenik meg. Amennyiben a beillesztett szöveg túl nagy, a rendszer a "Ez a válasz szokatlanul nagy. Tartsa
‹max›karakterek alatt." üzenettel figyelmeztet. Ha a beillesztett sorok nem felelnek meg a formátumnak, a "A‹line›sor nem érvényes HTTP-fejléc vagy állapotsor." vagy a "A‹line›sor érvénytelen HTTP-fejlécnevet tartalmaz." hibaüzenet látható. - Eredet kérése: A kérést kezdeményező oldal sémája, gazdagépe és opcionális portja (például
https://app.example.com). Kizárólag tiszta eredet adható meg, URL-útvonal, lekérdezés (query) vagy hitelesítési adatok nélkül. Helytelen formátum esetén a "Adjon meg egy eredetet csak egy sémával, gazdagéppel és opcionális porttal, például https://app.example.com." hibaüzenet jelenik meg. - Kért módszer: A kéréshez használni kívánt HTTP-metódus. Érvénytelen token esetén a "Adjon meg egy érvényes HTTP metódus tokent." hibaüzenet jelenik meg, míg tiltott metódusok esetén a "A böngészők nem engedélyezik a
‹method›metódust a fetch kérésekben." figyelmeztetés látható. - Kért fejlécnevek: Az
Access-Control-Request-Headersfejlécben küldeni kívánt egyedi kérésfejlécek listája, vesszővel vagy új sorral elválasztva (példáulContent-Type, Authorization). Érvénytelen fejléc esetén a "A „‹header›” nem érvényes HTTP-kérelem fejlécnév." hibaüzenet jelenik meg. - Tartalmazza a hitelesítő adatokat: Egy kapcsoló, amellyel jelezhető, hogy a kérés tartalmaz-e cookie-kat vagy HTTP-hitelesítést.
Bármilyen beviteli hiba esetén a rendszer a "Javítsa ki a kiemelt bemenetet, és próbálja újra." általános hibaüzenetet jeleníti meg.
A böngésző döntéseinek és okainak értelmezése
Az ellenőrzés futtatása után az eszköz megjeleníti a Böngésző döntés eredményét, az elemzett Access-Control-* mezőket, valamint a döntés részletes indoklását.
Kezdeti és üres állapotok
- Ha még nem történt adatbevitel, a "Illessze be a választ a CORS házirend ellenőrzéséhez." üzenet látható.
- Hiányos adatok esetén a rendszer az "Adja meg a válasz és a kérés részleteit, majd ellenőrizze a CORS szabályzatot." állapotot jelzi.
A döntés kimenetei
A kiértékelés eredménye háromféle lehet:
- A beillesztett CORS válasz engedélyezi.
- Letiltotta a beillesztett CORS válasz.
- A fejlécek áthaladnak, de a repülés előtti állapot nem ismert. (Ez akkor fordul elő, ha a preflight vizsgálat során nem lett beillesztve HTTP állapotsor).
Az eredet (Origin) kiértékelésének szabályai
A böngésző az Access-Control-Allow-Origin fejlécet vizsgálja az alábbi szabályok szerint:
- Ha a fejléc pontosan megegyezik a megadott eredettel, a döntés indoklása: "A Access-Control-Allow-Origin pontosan megegyezik a
‹origin›-val.". - Ha a fejléc helyettesítő karaktert tartalmaz, az indoklás: "A Access-Control-Allow-Origin bármilyen eredetet engedélyez ehhez a kéréshez.".
- Ha a fejléc hiányzik: "Access-Control-Allow-Origin hiányzik.".
- Ha a kérés hitelesítő adatokat tartalmaz, de az engedélyezett eredet értéke
*: "A Access-Control-Allow-Origin nem lehet *, ha hitelesítő adatok is szerepelnek benne.". - Ha az eredet nem egyezik meg a várt értékkel: "A Access-Control-Allow-Origin a
‹actual›, nem pedig a‹expected›.". - Ha a fejléc több értéket tartalmaz vagy vesszővel elválasztott listát ad meg, az érvénytelennek minősül: "A Access-Control-Allow-Origin értéke érvénytelen:
‹value›.".
A hitelesítő adatok (Credentials) hatása
A cookie-k és a HTTP-hitelesítés jelenléte szigorítja a CORS szabályok kiértékelését:
- Sikeres egyezés esetén: "A Access-Control-Allow-Credentials pontosan igaz.".
- Ha a kérés hitelesített, de a fejléc hiányzik vagy nem
true: "A hitelesítési adatokkal ellátott kérelemhez a Access-Control-Allow-Credentials: igaz.". - Ha a kérés nem tartalmaz hitelesítő adatokat: "A hitelesítő adatokat nem tartalmazza, így a Access-Control-Allow-Credentials nem befolyásolja ezt a döntést.".
Preflight (előzetes) kérések és állapotsorok
A nem egyszerű (például egyedi fejléceket használó vagy nem biztonságos metódusú) kérések előtt a böngésző egy előzetes OPTIONS kérést (preflight) küld. Ennek kiértékelése során az alábbi szabályok érvényesülnek:
HTTP állapotsor ellenőrzése
- Sikeres 2xx válaszkód esetén: "A
‹status›elővizsgálati állapot sikeres.". - Nem megfelelő válaszkód esetén: "A
‹status›repülés előtti állapot nem sikeres 2xx állapot.". - Ha hiányzik az állapotsor: "Nem lett beillesztve HTTP állapotsor, így a szükséges 2xx elővizsgálati állapot nem ellenőrizhető.".
Engedélyezett metódusok
- Ha a metódus engedélyezett: "Az előrepülés lehetővé teszi a
‹method›-t.". - Ha a metódus CORS-szempontból biztonságosnak minősül (safelisted), nem szükséges szerepelnie a válaszban: "A
‹method›egy CORS biztonságos módszer, és nem kell megjelennie a Access-Control-Allow-Methods-ban.". - Ha a metódus nem engedélyezett: "A Access-Control-Allow-Methods nem engedélyezi a
‹method›-t.".
Engedélyezett fejlécek és a helyettesítő karakterek korlátai
- Ha nincs vizsgálandó fejléc: "A kért fejlécnevekhez nem szükséges előzetes jóváhagyás.".
- Ha a fejlécek engedélyezettek: "Az elővizsgálat engedélyezi a kért fejlécneveket:
‹headers›.". - Ha a kérés nem tartalmaz hitelesítő adatokat, az
Access-Control-Allow-Headers: *helyettesítő karakter használható: "Access-Control-Allow-Headers: A * ezeket a neveket fedi le egy hitelesítési adatok nélküli kéréshez:‹headers›.". - Ha a kért fejléc nem engedélyezett: "A Access-Control-Allow-Headers nem engedélyezi:
‹headers›.". - Az
Authorizationfejléc speciális kezelést igényel: azt mindig kifejezetten nevesíteni kell a válaszban, a helyettesítő karakter nem váltja ki: "A Authorization-t kifejezetten fel kell tüntetni; Access-Control-Allow-Headers: A * nem fedi le.".
Adatkezelés és technikai korlátok
A CORS Ellenőrző működése során a megadott fejlécek és a kérés részletei kizárólag a böngészőben maradnak. A BroBroGo nem tölt fel és nem ment el semmit.
Fontos figyelembe venni, hogy az eszköz kizárólag a manuálisan beillesztett válaszfejléceket és a megadott kérésadatokat veti össze a böngészők CORS szabályrendszerével. Az eszköz nem lép kapcsolatba a szerverrel, nem olvas be URL-eket, nem állít be cookie-kat, nem végez DNS- vagy TLS-ellenőrzést, és nem módosítja a szerver konfigurációját. A sikeres ellenőrzési eredmény nem garantálja, hogy az élő kérés is működni fog, mivel a hálózati átirányítások, a gyorsítótárazott válaszok, a szerverszabályok időközbeni változásai, a böngészőbővítmények, valamint az előzetes ellenőrzést követő tényleges válasz eltérő viselkedést eredményezhetnek.
Gyakran Ismételt Kérdések (FAQ)
A tényleges választ vagy a repülés előtti választ kell beilleszteni?
Használja az Aktuális válasz lehetőséget annak ellenőrzésére, hogy a böngészőkód képes-e olvasni egy választ. Használja a Preflight választ a OPTIONS válaszhoz, amely jóváhagy egy későbbi metódust és annak kért fejlécneveit.
Miért hibásodhat meg a helyettesítő karakter hitelesítő adatokkal?
Cookie-k vagy HTTP-hitelesítés esetén az engedélyezett eredetnek pontosan meg kell egyeznie a kérés eredetével. Az engedélyezett metódusok és fejlécek helyettesítő karakterei szintén elveszítik helyettesítő karakter jelentésüket.
Egy múló eredmény bizonyítja, hogy az élő kérés működni fog?
Nem. Ez az eredmény csak a beillesztett választ és az itt megadott kérés részleteit tartalmazza. Az átirányítások, a gyorsítótárazott válaszok, a szerverszabályok megváltoztatása, a böngészőbővítmények és az előzetes ellenőrzés utáni tényleges válasz továbbra is megváltoztathatja az eredményt.