Sdílení zdrojů mezi zdroji - Cross-origin resource sharing
Sdílení zdrojů mezi zdroji (CORS) je mechanismus, který umožňuje omezit zdroje na webová stránka být požadován od jiného doména mimo doménu, ze které byl poskytován první zdroj.[1]
Webová stránka může volně vkládat obrázky křížového původu, šablony stylů, skripty, iframe a videa.[2] Určité požadavky na více domén, zejména Ajax jsou ve výchozím nastavení zakázány bezpečnostní politika stejného původu. CORS definuje způsob, jakým mohou prohlížeč a server interagovat a určit, zda je bezpečné povolit požadavek křížového původu.[3] Umožňuje větší svobodu a funkčnost než požadavky čistě stejného původu, ale je bezpečnější než pouhé povolení všech požadavků křížového původu.
Specifikace pro CORS je zahrnuta jako součást WHATWG Fetch Living Standard.[4] Tato specifikace popisuje, jak je CORS aktuálně implementován v prohlížečích.[5] Dřívější specifikace byla zveřejněna jako W3C Doporučení.[6]
Jak CORS funguje

Pro Ajax a Metody požadavku HTTP které mohou upravovat data (obvykle jiné metody HTTP než GET nebo pro POŠTA použití s určitými MIM typy), specifikace nařizuje, aby prohlížeče „předtiskly“ požadavek, vyžádaly si podporované metody ze serveru pomocí metody požadavku HTTP OPTIONS a poté po „schválení“ ze serveru odeslaly skutečný požadavek se skutečnou metodou požadavku HTTP. Servery mohou také klienty upozornit, zda by měla být s požadavky zasílána „pověření“ (včetně souborů cookie a dat ověření HTTP).[7]
Jednoduchý příklad
Předpokládejme, že uživatel navštíví stránku http://www.example.com a stránka se pokusí o požadavek křížového původu, aby načetla data uživatele z adresy http://service.example.com. Prohlížeč kompatibilní s CORS se pokusí provést požadavek křížového původu na service.example.com následujícím způsobem.
- Prohlížeč odešle požadavek GET s doplňkem
Původ
Záhlaví HTTP na service.example.com obsahující doménu, která sloužila nadřazené stránce:Původ: http://www.example.com
- Server na adrese service.example.com může odpovědět:
- Požadované údaje spolu s
Access-Control-Allow-Origin
(ACAO) záhlaví ve své odpovědi označující, že jsou povoleny požadavky od původu. Například v tomto případě by to mělo být:Access-Control-Allow-Origin: http://www.example.com
- Požadované údaje spolu s
Access-Control-Allow-Origin
(ACAO) záhlaví se zástupným znakem označujícím, že jsou povoleny požadavky ze všech domén:Access-Control-Allow-Origin: *
- Chybová stránka, pokud server nepovoluje požadavek křížového původu
- Požadované údaje spolu s
Zásada stejného původu se zástupnými znaky je vhodná, pokud je stránka nebo odpověď API považována za zcela veřejný obsah a má být přístupná všem, včetně jakéhokoli kódu na libovolném webu. Volně dostupný webové písmo na veřejné hostitelské službě, jako je Fonty Google je příklad.
Zásady stejného původu se zástupnými znaky jsou také široce a vhodně použity v model objektové schopnosti, kde stránky mají nezjistitelné adresy URL a mají být přístupné každému, kdo zná toto tajemství.
Hodnota „*“ je speciální v tom, že neumožňuje žádostem o zadání pověření, což znamená, že v požadavku napříč doménami neumožňuje odeslat ověřování HTTP, certifikáty SSL na straně klienta nebo soubory cookie.[8]
Všimněte si, že v architektuře CORS je záhlaví Access-Control-Allow-Origin nastavováno externí webovou službou (service.example.com), nikoli původní webový aplikační server (www.example.com). Tady, service.example.com používá CORS k povolení prohlížeče povolit www.example.com podat žádost service.example.com.
Pokud web určuje záhlaví „Access-Control-Allow-Credentials: true“, weby třetích stran mohou být schopné provádět privilegované akce a načítat citlivé informace. I když tomu tak není, útočníci mohou být schopni obejít jakoukoli kontrolu přístupu založenou na IP pomocí proxy serveru prostřednictvím prohlížečů uživatelů.
Příklad kontroly před výstupem
Při provádění určitých typů požadavků na doménu Ajax napříč doménami moderní prohlížeče, které podporují CORS, vloží další požadavek „předletové kontroly“, který určí, zda mají oprávnění k provedení akce. Tímto způsobem jsou předběžně předány požadavky na křížový původ, protože mohou mít dopad na uživatelská data.
MOŽNOSTI / Hostitel: service.example.com Původ: http://www.example.com
Pokud je service.example.com ochoten akci přijmout, může reagovat s následujícími záhlavími:
Access-Control-Allow-Origin: http: //www.example.comAccess-Control-Allow-Methods: PUT, DELETE
Prohlížeč poté odešle původní požadavek. Pokud service.example.com nepřijímá požadavky na více webů z tohoto původu, bude reagovat s chybou na požadavek OPTIONS a prohlížeč původní požadavek neprovede.
Záhlaví
Záhlaví HTTP, která se vztahují k CORS, jsou:
Vyžádejte si záhlaví
Původ
Metoda Access-Control-Request
Záhlaví Access-Control-Request
Záhlaví odpovědí
Access-Control-Allow-Origin
Pověření pro řízení přístupu - povolení
Záhlaví Access-Control-Expose
Access-Control-Max-Age
Metody řízení přístupu-povolení
Záhlaví Access-Control-Allow
Podpora prohlížeče
CORS je podporován všemi prohlížeči na základě následujících modulů rozložení:
- Blikat - a Chrom prohlížeče založené naChrome 28+,[9][10] Opera 15+,[9] Amazon Silk, Android je Web 4.4+ a WebView Qt WebEngine)
- Gekon 1.9.1 (Firefox 3.5,[11] SeaMonkey 2.0[12]) a výše.
- MSHTML / Trident 6.0 (Internet Explorer 10) má nativní podporu.[13] MSHTML / Trident 4.0 a 5.0 (Internet Explorer 8 a 9) poskytují částečnou podporu prostřednictvím objektu XDomainRequest.[1]
- rychle prohlížeče založené na (Opera) implementují CORS od Opera 12.00[14] a Opera Mobile 12, ale ne Opera Mini.[15]
- WebKit (Počáteční revize nejistá, Safari 4 a vyšší,[1] Google Chrome 3 a vyšší, případně dříve).[16]
- Microsoft Edge Všechny verze. [17]
Dějiny
Podpora křížového původu byla původně navržena Mattem Oshrym, Bradem Porterem a Michaelem Bodellem z Tellme Networks v březnu 2004 k zařazení do VoiceXML 2.1[18] umožnit bezpečné požadavky na data křížového původu v prohlížečích VoiceXML. Mechanismus byl považován za obecnou povahu a nebyl specifický pro VoiceXML a byl následně rozdělen do implementační poznámky.[19] Pracovní skupina WebApps W3C za účasti hlavních prodejců prohlížečů začala formalizovat NOTE na Pracovní koncept W3C na cestě k formálnímu Doporučení W3C postavení.
V květnu 2006 byl předložen první pracovní návrh W3C.[20] V březnu 2009 byl koncept přejmenován na „Sdílení zdrojů mezi zdroji“[21] a v lednu 2014 bylo přijato jako doporučení W3C.[22]
CORS vs JSONP
CORS lze použít jako moderní alternativu k JSONP vzor. Výhody CORS jsou:
- Zatímco JSONP podporuje pouze
DOSTAT
metoda požadavku, CORS podporuje také jiné typy požadavků HTTP. - CORS umožňuje webovému programátorovi používat běžné XMLHttpRequest, který podporuje lepší zpracování chyb než JSONP.
- Zatímco JSONP může způsobit cross-site scripting (XSS) problémy při ohrožení externího webu, CORS umožňuje webům ručně analyzovat odpovědi, aby se zvýšilo zabezpečení.[3]
Hlavní výhodou JSONP byla jeho schopnost pracovat na starších prohlížečích, které předcházely podpoře CORS (Opera Mini a Internet Explorer 9 a starší). CORS je nyní podporován většinou moderních webových prohlížečů.[23]
Viz také
Reference
- ^ A b C 6. července 2009, autor: Arun Ranganathan (06.07.2009). „cross-site xmlhttprequest s CORS ✩ Mozilla Hacks - blog webového vývojáře“. Hacks.mozilla.org. Citováno 2012-07-05.
- ^ „Zásady stejného původu / přístup k síti mezi původci“. MDN.
- ^ A b „Cross-domain Ajax with Cross-Origin Resource Sharing“. NCZOnline. Citováno 2012-07-05.
- ^ "Načíst životní standard".
- ^ „Zápisy z pracovní skupiny WebAppSec“.
- ^ „Sdílení zdrojů mezi zdroji“.
- ^ „cross-site xmlhttprequest s CORS“. MOZILLA. Citováno 2012-09-05.
- ^ Sdílení zdrojů mezi zdroji. W3.org. Citováno 2014-04-12.
- ^ A b "Blikat". QuirksBlog. Duben 2013. Citováno 4. dubna 2013.
- ^ „Google jde svou vlastní cestou, rozvětvuje vykreslovací modul WebKit“. Ars Technica. Duben 2013. Citováno 4. dubna 2013.
- ^ „Řízení přístupu HTTP (CORS) - MDN“. Developer.mozilla.org. Archivovány od originál dne 2010-05-27. Citováno 2012-07-05.
- ^ „Gecko - MDN“. Developer.mozilla.org. 8. 6. 2012. Citováno 2012-07-05.
- ^ Tony Ross; Programový manažer; Internet Explorer (02.02.2012). „CORS pro XHR v IE10“. MSDN. Citováno 2012-12-14.
- ^ David Honneffer, dokumentační specialista (14.06.2012). „12,00 pro seznam změn UNIX“. Opera. Archivovány od originál dne 18. 06. 2012. Citováno 2012-07-05.
- ^ David Honneffer, specialista na dokumentaci (2012-04-23). „Opera Software: Podpora webových specifikací v aplikaci Opera Presto 2.10“. Opera.com. Citováno 2012-07-05.
- ^ „59940: Apple Safari WebKit Cross-Origin Resource Sharing Bypass“. Osvdb.org. Archivovány od originál dne 19. 7. 2012. Citováno 2012-07-05.
- ^ „Průvodce vývojářem Microsoft Edge“.
- ^ „Voice Extensible Markup Language (VoiceXML) 2.1“. W3.org. 23. 3. 2004. Citováno 2012-07-05.
- ^ „Autorizace přístupu pro čtení k obsahu XML pomocí Instrukce pro zpracování 1.0“. W3.org. Citováno 2012-07-05.
- ^ „Autorizace přístupu pro čtení k obsahu XML pomocí Instrukce pro zpracování 1.0 W3C - pracovní koncept 17. května 2006“. W3.org. Citováno 17. srpna 2015.
- ^ „Sdílení zdrojů mezi zdroji - pracovní koncept W3C 17. března 2009“. W3.org. Citováno 17. srpna 2015.
- ^ „Sdílení zdrojů mezi zdroji - doporučení W3C 16. ledna 2014“. W3.org. Citováno 17. srpna 2015.
- ^ „Kdy mohu použít ... Sdílení zdrojů napříč zdroji“. caniuse.com. Citováno 2012-07-12.
externí odkazy
- Načíst životní standard (aktuální specifikace pro CORS)
- MDN Řízení přístupu HTTP (CORS) článek
- Nastavení CORS na Apache se správnými hlavičkami odpovědí, které umožňují vše
- Podrobné informace o postupu pro povolení podpory CORS na různých (webových) serverech
- Skály HTML5 vysvětluje, jak CORS funguje podrobně
- W3C CORS pro vývojáře průvodce
- Jak zakázat CORS v prohlížečích založených na WebKit pro maximální bezpečnost a soukromí
- Online skener nesprávné konfigurace CORS