Razumijevanje Cross-Origin Resource Sharing (CORS) politika ključno je za ispravno funkcionisanje modernih web aplikacija. Kada pretraživač izvršava mrežni zahtjev prema drugom porijeklu (različitom domenu, protokolu ili portu), on primjenjuje stroga sigurnosna pravila kako bi utvrdio da li je tom kodu dozvoljeno čitanje odgovora. Alat "CORS provjera" omogućava brzu analizu HTTP zaglavlja odgovora i simulaciju odluka koje pretraživač donosi na osnovu unesenih parametara zahtjeva.
Ovaj alat radi u potpunosti lokalno. Vaša zaglavlja i detalji zahtjeva ostaju u vašem pretraživaču. BroBroGo ništa ne prenosi niti sprema, što omogućava rad sa zaglavljima bez slanja podataka na vanjske servere.
Kako funkcionira CORS provjera
Alat analizira unesena HTTP zaglavlja odgovora i upoređuje ih sa specifičnim detaljima zahtjeva koje definiše korisnik. Na osnovu tih podataka, alat simulira ponašanje pretraživača i donosi odluku o tome da li bi zahtjev bio odobren ili blokiran.
Za analizu su potrebni sljedeći unosi:
- Odgovor na provjeru: Odabir između opcija "Stvarni odgovor" ili "Odgovor prije leta".
- HTTP zaglavlja odgovora: Tekstualni unos koji sadrži zaglavlja odgovora, uključujući i statusnu liniju kada se provjerava odgovor prije pregleda. Maksimalna dužina unosa je 200.000 znakova.
- Zatražite porijeklo: Unos koji sadrži isključivo šemu, host i opcionalni port (npr.
https://app.example.com). Unos ne smije sadržavati putanju, upite ili vjerodajnice. - Traženi metod: HTTP metod koji se koristi u zahtjevu (npr. GET, POST, OPTIONS).
- Zatražena imena zaglavlja: Nazivi zaglavlja iz
Access-Control-Request-Headers, odvojeni zarezima ili novim redovima. - Uključite vjerodajnice: Opcija koja označava da li zahtjev uključuje kolačiće ili HTTP autentifikaciju.
Nakon provjere, alat prikazuje jedno od sljedećih stanja kao odluku pretraživača:
- "Dozvoljeno zalijepljenim odgovorom CORS."
- "Blokirano zalijepljenim odgovorom CORS."
- "Zaglavlja prolaze, ali status prije leta nije poznat."
- "Unesite detalje o odgovoru i zahtjevu, a zatim provjerite politiku CORS." (ako nedostaju unosi)
- "Zalijepite odgovor da provjerite njegovu politiku CORS." (početno stanje alata)
Uloga Access-Control-Allow-Origin zaglavlja
Zaglavlje Access-Control-Allow-Origin određuje kojim vanjskim porijeklima je dozvoljen pristup resursu. Alat provjerava usklađenost ovog zaglavlja sa zatraženim porijeklom i prikazuje obrazloženje odluke:
- Ako se vrijednosti podudaraju, prikazuje se poruka: "Access-Control-Allow-Origin tačno odgovara
‹origin›." - Ako je konfigurisan zamjenski znak, prikazuje se: "Access-Control-Allow-Origin dozvoljava bilo koje porijeklo za ovaj zahtjev."
- U slučaju nedostatka zaglavlja, ispisuje se: "Access-Control-Allow-Origin nedostaje."
- Ako vrijednost ne odgovara očekivanom porijeklu, prikazuje se: "Access-Control-Allow-Origin je
‹actual›, a ne‹expected›." - U slučaju neispravnog formata (poput više vrijednosti odvojenih zarezom), alat javlja: "Access-Control-Allow-Origin ima nevažeću vrijednost:
‹value›."
Uticaj vjerodajnica na CORS pravila
Kada zahtjev uključuje vjerodajnice (kolačiće ili HTTP autentifikaciju), pretraživači primjenjuju znatno stroža pravila:
- Zabrana zamjenskih znakova:
Access-Control-Allow-Originne može biti*kada su uključene vjerodajnice. Ako se detektuje ova konfiguracija, alat prikazuje obrazloženje: "Access-Control-Allow-Origin ne može biti * kada su uključene vjerodajnice." - Obavezno eksplicitno odobrenje: Zahtjev s vjerodajnicama zahtijeva da zaglavlje
Access-Control-Allow-Credentialsbude postavljeno tačno natrue. Ako to nije slučaj, prikazuje se poruka: "Zahtjev s vjerodajnicama treba Access-Control-Allow-Credentials: istina." - Gubitak značenja zamjenskih znakova: Kada su vjerodajnice uključene, zamjenski znakovi (
*) u zaglavljimaAccess-Control-Allow-MethodsiAccess-Control-Allow-Headersgube svoje značenje i ne mogu se koristiti za grupno odobravanje.
Ako vjerodajnice nisu uključene, alat prikazuje obrazloženje: "Akreditivi nisu uključeni, tako da Access-Control-Allow-Credentials ne utiče na ovu odluku."
Provjera preflight (OPTIONS) odgovora
Za zahtjeve koji nisu jednostavni (npr. koriste nestandardne metode ili zaglavlja), pretraživač šalje preliminarni "preflight" zahtjev koristeći OPTIONS metod. Alat analizira ove odgovore kroz sljedeća pravila:
HTTP statusni kodovi
Preflight odgovor mora vratiti uspješan status iz serije 2xx.
- Ako je status uspješan, prikazuje se: "Status prije leta
‹status›je uspješan." - Ako status nije u opsegu 2xx, prikazuje se: "Status prije leta
‹status›nije uspješan status 2xx." - Ako u unesenim zaglavljima nedostaje HTTP statusna linija, rezultat provjere statusa postaje neodređen, uz poruku: "Nije zalijepljena nijedna HTTP statusna linija, tako da se ne može provjeriti traženi status 2xx prije pregleda."
Dozvoljene metode
Alat provjerava da li Access-Control-Allow-Methods odobrava traženi metod.
- Ako je metod odobren, ispisuje se: "Predlet dozvoljava
‹method›." - Ako se radi o standardnoj metodi koja ne zahtijeva preflight odobrenje, prikazuje se: "
‹method›je metoda zaštićena CORS i ne mora se pojaviti u Access-Control-Allow-Methods." - Ako metod nije dozvoljen, ispisuje se: "Access-Control-Allow-Methods ne dozvoljava
‹method›."
Dozvoljena zaglavlja i specifičnost Authorization zaglavlja
Zahtijevana zaglavlja moraju biti odobrena kroz Access-Control-Allow-Headers.
- Ako preflight odobrava zaglavlja, prikazuje se: "Preflight dozvoljava tražena imena zaglavlja:
‹headers›." - Ako nema zahtijevanih zaglavlja koja traže odobrenje, ispisuje se: "Nijedan traženi naziv zaglavlja ne treba odobrenje prije objavljivanja."
- Za zahtjeve bez vjerodajnica, zamjenski znak pokriva sva zaglavlja: "Access-Control-Allow-Headers: * pokriva ova imena za zahtjev bez vjerodajnica:
‹headers›." - Ako zaglavlja nisu odobrena, ispisuje se: "Access-Control-Allow-Headers ne dozvoljava:
‹headers›."
Posebno pravilo za Authorization: Zaglavlje Authorization mora biti eksplicitno navedeno u Access-Control-Allow-Headers. Čak i ako je prisutno Access-Control-Allow-Headers: *, ono ne pokriva ovo zaglavlje. U tom slučaju alat prikazuje obrazloženje: "Authorization mora biti eksplicitno naveden; Access-Control-Allow-Headers: * to ne pokriva."
Ograničenja analize
Rezultat koji daje ovaj alat odnosi se isključivo na statičku analizu unesenih zaglavlja i parametara. Alat ne vrši mrežne zahtjeve, ne kontaktira servere, ne čita URL-ove, ne postavlja kolačiće, niti provjerava DNS ili TLS konfiguracije. Prolazni rezultat ne garantuje da će stvarni zahtjev u aplikaciji funkcionisati, jer na njega mogu uticati preusmjeravanja, keširanje, izmjene pravila na serveru, ekstenzije pretraživača ili stvarni odgovor nakon preflight faze.
Često postavljana pitanja (FAQ)
Da li da zalijepim stvarni odgovor ili odgovor prije leta?
Koristite Stvarni odgovor da provjerite može li kod pretraživača pročitati jedan odgovor. Koristite odgovor prije pregleda za OPTIONS odgovor koji odobrava kasniji metod i njegova tražena imena zaglavlja.
Zašto zamjenski znak može propasti s vjerodajnicama?
Kada su uključeni kolačići ili HTTP autentifikacija, dozvoljeno porijeklo mora tačno odgovarati porijeklu zahtjeva. Zamjenski znakovi za dozvoljene metode i zaglavlja također gube svoje značenje zamjenskih znakova.
Dokazuje li prolazni rezultat da će zahtjev uživo funkcionirati?
Ne. Ovaj rezultat pokriva samo zalijepljeni odgovor i detalje zahtjeva unesene ovdje. Preusmjeravanja, keširani odgovori, promjena pravila servera, ekstenzije pretraživača i stvarni odgovor nakon preflighta i dalje mogu promijeniti ishod.
Koje greške u unosu mogu uzrokovati neuspjeh provjere?
Alat će označiti neispravne unose i prikazati poruku "Popravite označeni unos i pokušajte ponovo.". To se dešava ako je unos prazan ("Zalijepite HTTP zaglavlja odgovora prije provjere."), prevelik ("Ovaj odziv je neobično velik. Držite ga ispod ‹max› znakova."), ako sadrži nevažeći red ("Red ‹line› nije važeće HTTP zaglavlje ili statusna linija.") ili nevažeće ime zaglavlja ("Red ‹line› sadrži nevažeće ime HTTP zaglavlja."). Također, porijeklo mora biti ispravno formatirano ("Unesite porijeklo samo sa šemom, hostom i opcijskim portom, kao što je https://app.example.com."), metod mora biti važeći token ("Unesite važeći token HTTP metode.") i ne smije biti zabranjen ("Pretraživači ne dozvoljavaju metodu ‹method› u fetch zahtjevima."), a zaglavlja moraju imati ispravne nazive ("“‹header›” nije važeće ime zaglavlja HTTP zahtjeva.").