Skilningur á CORS og hlutverki þess í vöfrum
Cross-Origin Resource Sharing (CORS) er öryggiskerfi sem vafrar nota til að stýra því hvort vefkóði megi lesa svör sem sótt eru yfir ólíka uppruna. Þegar vefsíða á einum uppruna reynir að senda beiðni á annan uppruna, metur vafri svörunina út frá tilteknum HTTP-svörunarhausum.
Tólið CORS afgreiðslumaður er hannað til að hjálpa vefhönnuðum, bakendaforriturum, rekstraraðilum og hönnuðum API-kerfa að greina og skilja þessar reglur. Með því að greina HTTP-svörunarhausa og bera þá saman við fyrirhugaða beiðni, sýnir tólið hvort vafri myndi leyfa eða loka á aðgang að gögnunum. Þetta á jafnt við um raunveruleg svör og forflugssvör (e. preflight requests) þar sem OPTIONS beiðni er send á undan til að fá samþykki fyrir tiltekinni aðferð og hausum.
Inntaksgögn og kröfur um snið
Til að framkvæma CORS-athugun þarf að gefa upp upplýsingar um svörunina og fyrirhugaða beiðni:
- Svar við athugun: Val á milli tveggja kosta:
- Raunverulegt svar: Notað til að athuga hvort vafrakóði geti lesið tiltekið svar.
- Forflugssvörun: Notað fyrir
OPTIONSsvarið sem samþykkir síðari aðferð og umbeðin hausnöfn.
- HTTP svarhausar: Textasvæði þar sem HTTP-svörunarhausar eru límdir inn. Fyrir forflugssvör þarf einnig að láta stöðulínuna fylgja með. Hámarkslengd þessa reits er 200.000 stafir. Ef reiturinn er auður birtast villuboðin „Límdu HTTP svarhausa áður en þú hakar.“. Ef inntakið fer yfir hámarkið birtist „Þessi viðbrögð eru óvenju mikil. Hafðu það undir
‹max›stöfum.“. Ef lína er ógild sýnir tólið „Lína‹line›er ekki gild HTTP haus eða stöðulína.“ eða „Lína‹line›inniheldur ógilt HTTP hausheiti.“. - Biðja um uppruna: Uppruni beiðninnar sem samanstendur af samskiptareglu (scheme), hýsli (host) og valfrjálsu tengi (port). Dæmi um snið er
https://app.example.com. Slóðir, fyrirspurnarbreytur eða auðkenni eru ekki leyfð. Ef uppruninn er ógildur birtast villuboðin „Sláðu inn uppruna með aðeins kerfi, hýsil og valfrjálsu tengi, eins og https://app.example.com.“. - Umbeðin aðferð: HTTP-aðferðin sem á að nota. Ef táknið er ógilt birtist „Sláðu inn gilt HTTP aðferðartákn.“. Ef reynt er að nota aðferð sem vafrar leyfa ekki í fetch-beiðnum birtist „Vafrar leyfa ekki
‹method›aðferðina í fetch beiðnum.“. - Umbeðin hausnöfn: Hausar úr
Access-Control-Request-Headerssem á að senda, aðskildir með kommum eða nýjum línum. Dæmi um snið erContent-Type, Authorization. Ef hausnafn er ógilt birtist „„‹header›“ er ekki gilt heiti HTTP beiðni.“. - Láttu skilríki fylgja með: Valmöguleiki (toggle) sem gefur til kynna hvort beiðnin innihaldi vafrakökur eða HTTP-auðkenningu.
Ef almenn vandamál koma upp við útfyllingu inntaksreita birtast villuboðin „Lagaðu auðkennda inntakið og reyndu aftur.“.
Ákvörðun vafrans og túlkun niðurstaðna
Eftir að upplýsingarnar hafa verið slegnar inn og smellt er á hnappinn til að keyra athugunina, birtir tólið eina af eftirfarandi niðurstöðum undir Vafraákvörðun:
- „Límdu svar til að athuga CORS stefnu þess.“ (Þegar ekkert svar hefur verið límt inn í upphafi).
- „Sláðu inn svar og biðja um upplýsingar, athugaðu síðan CORS stefnuna.“ (Ef inntak vantar).
- „Leyfilegt af límdu CORS svari.“.
- „Lokað af límdu CORS svari.“.
- „Hausar fara framhjá en staða forflugs er óþekkt.“.
Tólið sýnir einnig þáttun á Access-Control-* reitum og gefur nákvæmar skýringar á ákvörðuninni.
Reglur um uppruna og skilríki
Meðhöndlun á Access-Control-Allow-Origin og skilríkjum fylgir ströngum reglum sem ákvarða hvort beiðni sé leyfð:
| Atburðarás | Regla og hegðun vafrans | Skýring í tólisniði |
|---|---|---|
| Nákvæmt samsvörun | Uppruni passar við gildi haussins. | „Access-Control-Allow-Origin passar nákvæmlega við ‹origin›.“ |
| Algildisstafur án skilríkja | * leyfir alla uppruna þegar skilríki vantar. |
„Access-Control-Allow-Origin leyfir hvaða uppruna sem er fyrir þessa beiðni.“ |
| Algildisstafur með skilríkjum | Access-Control-Allow-Origin má ekki vera * ef skilríki fylgja. |
„Access-Control-Allow-Origin getur ekki verið * þegar skilríki eru innifalin.“ |
| Ógilt gildi hauss | Margföld gildi eða kommu-aðskilin gildi eru ógild. | „Access-Control-Allow-Origin hefur ógilt gildi: ‹value›.“ |
| Misræmi í uppruna | Uppruninn passar ekki við leyfðan uppruna. | „Access-Control-Allow-Origin er ‹actual›, ekki ‹expected›.“ |
| Haus vantar | Enginn upprunahaus er til staðar í svarinu. | „Access-Control-Allow-Origin vantar.“ |
Ef skilríki fylgja með beiðninni verður Access-Control-Allow-Credentials að vera nákvæmlega true. Ef það vantar birtist skýringin „Skilríkisbeiðni þarf Access-Control-Allow-Credentials: satt.“. Ef engin skilríki eru notuð hefur þessi haus engin áhrif á ákvörðunina.
Reglur um forflug, aðferðir og hausa
Í forflugssvörum (preflight) gilda sérstakar reglur um stöðukóða, leyfðar aðferðir og hausa:
- HTTP staða: Forflugssvar verður að skila árangursríkum 2xx stöðukóða. Ef stöðulína vantar er niðurstaðan óákveðin og sýnir „Engin HTTP stöðulína var límd, þannig að ekki er hægt að athuga nauðsynlega 2xx forflugsstöðu.“. Ef staðan er ógild birtist „Forflugsstaðan
‹status›er ekki góð 2xx staða.“. - Aðferðir: Ef aðferðin er á öryggisskrá (CORS-safelisted) þarf hún ekki að vera skráð í
Access-Control-Allow-Methods. Annars verður hún að vera leyfð sérstaklega. Ef hún er leyfð birtist „Forflugið leyfir‹method›.“, en ef hún er bönnuð birtist „Access-Control-Allow-Methods leyfir ekki‹method›.“. - Hausar og algildisstafir: Ef engin skilríki eru notuð getur
*virkað sem algildisstafur íAccess-Control-Allow-Headers. Hins vegar missa algildisstafir gildi sitt ef skilríki eru innifalin. - Sérregla um Authorization: Hausinn
Authorizationverður alltaf að vera sérstaklega tilgreindur íAccess-Control-Allow-Headers. Algildisstafurinn*dugar ekki til að leyfa hann, jafnvel þótt engin skilríki séu notuð. Ef hann vantar birtist „Authorization verður að vera sérstaklega skráð; Access-Control-Allow-Headers: * nær ekki yfir það.“.
Takmarkanir á greiningu og vinnsluhæfni
Þetta tól framkvæmir eingöngu kyrrstæða greiningu á þeim svörunarhausum og beiðniupplýsingum sem slegnar eru inn. Það hefur ekki samskipti við neina netþjóna, les ekki vefslóðir í rauntíma, setur ekki vafrakökur, framkvæmir ekki DNS- eða TLS-athuganir og breytir ekki stillingum á netþjónum.
Árangursrík niðurstaða tryggir ekki að raunveruleg beiðni muni virka í lifandi umhverfi. Greiningin tekur ekki tillit til tilvísana (redirects), vistaðra svara í skyndiminni (cached responses), breytinga á reglum netþjóns, vafraviðbóta eða raunverulegs svars sem berst eftir að forflugi lýkur.
Öryggi og meðferð gagna
Öll vinnsla á gögnum fer fram staðbundið í vafranum þínum. Engar upplýsingar, hvort sem um er að ræða HTTP-hausa eða upplýsingar um beiðnir, eru sendar til eða vistaðar á netþjónum BroBroGo.
Algengar spurningar
Ætti ég að líma inn raunverulegt svar eða forflugssvarið?
Notaðu Raunverulegt svar til að athuga hvort vafrakóði geti lesið eitt svar. Notaðu Preflight svar fyrir OPTIONS svarið sem samþykkir síðari aðferð og umbeðin hausnöfn hennar.
Af hverju getur algildismerki mistekist með skilríkjum?
Þegar vafrakökur eða HTTP auðkenning eru innifalin verður leyfður uppruna að passa nákvæmlega við upprunann sem beðið er um. Jokertákn fyrir leyfilegar aðferðir og hausar missa líka merkingu algildis.
Sannar árangurslaus niðurstaða að beiðnin í beinni muni virka?
Nei. Þessi niðurstaða nær aðeins yfir límt svar og upplýsingar um beiðnina sem eru færðar inn hér. Tilvísanir, skyndiminni svör, breyting á netþjónsreglum, vafraviðbótum og raunverulegt svar eftir forflug getur samt breytt niðurstöðunni.