Schéma URI souboru je schéma URI zdokumentované v RFC 8089 , RFC 1630 , RFC 1738 a RFC 3986 , určené k adresování souborů v místním počítači nebo místní síti podle jejich přímé cesty na disku, síťové složce nebo v některých případech na ftp serveru. Soubor schématu URI je registrován v registru schémat IANA URI [1] a je uveden v části „Schémy trvalé URI“.
Souborové schéma je jedním z nejstarších schémat URI . To bylo ztělesněno v softwaru od úsvitu internetu. WorldWideWeb , první webový prohlížeč vytvořený v roce 1991 Timem Berners-Lee , vynálezcem World Wide Web , podporoval souborové schéma . Specifikace RFC 1630 , ve které byla poprvé zdokumentována, byla také napsána Tim Berners-Lee v červnu 1994, před vytvořením W3C , a je jednou z nejstarších internetových specifikací.
Před zavedením ftp schématu se souborové schéma používalo k odkazování na soubory umístěné na ftp serverech. Tim Berners-Lee sám navrhl použití souborového schématu v URL pro odkazy na soubory přístupné přes ftp protokol a sám takové odkazy použil v sekci Reference ve svých publikacích [2] . Prohlížeč Lynx , jeden z nejstarších dochovaných prohlížečů, si zachoval tuto interpretaci schématu souboru [3] dodnes .
Na rozdíl od většiny známých schémat (např. http, nfs, sip, telnet atd.) není souborové schéma protokolem. Toto je výslovně uvedeno v RFC 1738 : "Vlastností tohoto schématu je, že nespecifikuje internetový protokol nebo metodu přístupu k souboru, takže jeho použití v síťových protokolech mezi hostiteli je omezené" [4] . Schéma souboru jednoduše určuje cestu k souboru jako URL (nebo URI) na jednom konkrétním počítači. Také říká, že "toto schéma, na rozdíl od většiny jiných schémat URL, nedefinuje zdroj, který je veřejně dostupný přes internet."
Souborové schéma podporují všechny populární prohlížeče , na všech operačních systémech, i když je založeno na velmi starém standardu, který popisuje formát URL, ale zatím nemá svůj vlastní. Ale vzhledem k výše uvedeným vlastnostem je jeho použití omezené. Funguje to v adresním řádku, ale toto schéma se téměř nikdy nenachází v označení HTML webových stránek. Bylo vyvinuto nové schéma , aplikace , které nahrazuje soubor . Schéma aplikace je popsáno v doporučení W3C z 16. května 2013 [5]
Adresa URL se souborem schématu má formát [4] :
file:// <hostitel> / <cesta>kde hostitel je plně kvalifikovaný název domény v systému, kde je cesta k dispozici , a cesta je cesta k hierarchickému adresáři ve formátu adresář / adresář /.../název_souboru . Pokud je hostitel vynechán, výchozí je "localhost", hostitel, na kterém je adresa URL analyzována. Před rokem 2005 měl standard takový požadavek, že pokud je vynechán hostitel, pak nelze vynechat odpovídající lomítko nebo dvojité lomítko („file:///foo.txt“ bude fungovat, ale „file://foo.txt“ nebude, ačkoli některé analyzátory tento případ dokázaly zvládnout). RFC 3986 vydaný v roce 2005 tento požadavek odstranil. Podle RFC 3986 vynechání autority (v tomto případě ekvivalentní k hostiteli ) také vynechá dvojité lomítko (//).
Dopředné lomítko (/) má různý význam v závislosti na pozici v URI.
Komponenty login (uživatelské jméno), heslo (heslo) a port (port) se v adresách URL se schématem souborů nepoužívají. Zároveň však komponenty parametry (řetězec dotazu) a kotva (identifikátor fragmentu) [6] může používat samotná aplikace, která zobrazuje obsah URL daného souboru. Skript v dokumentu HTML může například číst parametry a pro navigaci v dokumentu lze standardním způsobem použít kotvu.
Adresy URL souborů se liší znakovou sadou jak od tradičních adres URL, tak od cest k souborům v systémech souborů. Protože cesty v souborových systémech mohou obsahovat znaky vyhrazené v URL pro servisní účely ('#', '%' atd.), jsou takové znaky (dříve také mezera ' ') při převodu cesty na URL souboru zakódovány . Zároveň se ale na rozdíl od URL v URL souboru doporučuje používat znaky cizích abeced (tedy ne z tabulky US-ASCII) tak, jak jsou, tedy bez kódování URL [6] . Je to proto, že oktety zakódované v URL v URL souboru jsou na aktuální kódové stránce uživatele považovány za bajty, což znamená, že hodnota adresy URL se bude měnit v závislosti na národním prostředí, ve kterém je dokument zobrazen [6] .
4 Unixové příklady ukazující na stejný soubor / etc / fstab :
file://localhost/etc/fstab file:///etc/fstab file:///etc/./fstab file:///etc/../etc/fstabPříklad odkazu na soubor rfc959.txt, který se nachází na ftp serveru nnsc.nsf.net [Poznámka. 1] :
soubor://nnsc.nsf.net/rfc/rfc959.txt Mac OS2 příklady na Mac OS ukazující na stejný soubor /var/log/system.log :
file://localhost/var/log/system.log file:///var/log/system.log WindowsPříklady cest podporovaných aplikacemi Windows směřujícími na soubor c: \ WINDOWS \ clock.avi :
file://localhost/c|/WINDOWS/clock.avi file:///c|/WINDOWS/clock.avi file://localhost/c:/WINDOWS/clock.avi file:///c:/WINDOWS/clock.aviPříklad cesty k souboru start.swf umístěnému v síťové složce products na počítači se síťovým názvem applib [7] :
file://applib/products/ab/abc_9/4148.920a/media/start.swfPříklad URI souboru se znaky kódovanými % a znakem Unicode [7] (v aplikaci Internet Explorer 6 a 7 nemusí příklad %20 fungovat [8] ):
file:///C:/Documents%20and%20Settings/davris/FileSchemeURIs.doc soubor:///C:/exampleㄓ.txtProhlížeč | Podpora schématu souborů (localhost) | Prázdný hostitel ( file:/// ) | Hostitel sítě | Písmeno jednotky v cestě ( C: ) [Příkl. v. 1] | Přehled složek | URL kódované znaky | odkazy na soubory v html |
---|---|---|---|---|---|---|---|
Google Chrome | Ano | Ano | VÍTĚZÍ | Ano | Ano | Ano | Ano |
internet Explorer | Ano | Ano | VÍTĚZÍ | Ano | Ne | Ano | Ano |
Konqueror | Ano | Ano | ? | - | Ano | Ano | Ano |
Rys | Ano | Ano | FTP | Ano | Ano | Ano | Ano |
Mozilla Firefox | Ano | Ano | VÝHRA [Př. v. 2] | Ano | Ano | Ano | Ano |
Opera | Ano | Ano | VÍTĚZÍ | Ano | Ano | Ano | Ano |
safari | Ano | ? | ? | - | Ne | ? | ? |
Prohlížeč Yandex | Ano | Ano | VÍTĚZÍ | Ano | Ano | Ano | Ano |
Schéma URI souboru bylo původně podporováno systémem Windows, tzn. s příchodem podpory URI [pozn. 2] obecně a konkrétně s vydáním Internet Exploreru 1 [10] . První verze Internet Exploreru byla vyvinuta v roce 1995, kdy ještě neexistoval standard URL a souborové schéma bylo možné interpretovat různými způsoby, což se stalo v prohlížeči. Jeho různé moduly zacházely se schématem souborů odlišně. Po přepracování byl tento stav odstraněn. Byl vytvořen shlwapi.dll , do kterého byl umístěn veškerý kód pro práci s URL. Při přepracování byly dohodnuty dvě podoby souborového schématu: jedna podle standardu URL, druhá stará forma, která pocházela z dob DOSu. Zaměstnanci Microsoftu to nazvali legacy file URL (zastaralé URL souboru). Příklady adres URL starších souborů:
Cesta k souboru: c:\windows\My Documents 100%20\foo.txt Adresa URL staršího souboru: file://c:\windows\My Documents 100%20\foo.txt Standardní adresa URL souboru: file:///c:/windows/My%20Documents%20100%2520/foo.txt Cesta k souboru: \\server\share\My Documents 100%20\foo.txt Adresa URL staršího souboru: file://\\server\share\My Documents 100%20\foo.txt Standardní adresa URL souboru: file://server/share/My%20Documents%20100%2520/foo.txtNová knihovna dll správně zpracovává nové i staré adresy URL souborů, takže její funkce PathCreateFromUrl() a UrlCreateFromPath() jsou doporučeny pro převod mezi cestami Windows a URL souborů [6] [11] .
Kromě těchto funkcí byla v urlmon.dll (počínaje Internet Explorerem 3 ) vytvořena funkce CreateURLMoniker() pro převod URI řetězce na objekt, který lze použít k získání dat adresovaných danému URI ( zástupný název ). Tato funkce ale také způsobovala určité problémy s převodem URI souboru [11] , v důsledku čehož byla přidána a doporučena k použití nová funkce CreateURLMonikerEx() (počínaje Internet Explorerem 5.5 ), ve které byly všechny tyto problémy opraveny. S vydáním aplikace Internet Explorer 7 byla přidána další funkce CreateURLMonikerEx2(), která podporuje relativní cesty.
S příchodem a rozšířením podpory prohlížečů pro skriptovací jazyky , jako je JavaScript , byla objevena řada zranitelností souvisejících s používáním souborového schématu. V důsledku toho prodejci prohlížečů zavedli řadu vestavěných omezení prohlížečů na používání adres URL souborů.
Odkazy se schématem souborů v dokumentech HTML načítaných přes HTTP nefungují téměř ve všech populárních prohlížečích: Internet Explorer (od verze 6 SP1) [12] [Poznámka. 3] , Mozilla Firefox [14] [15] , Chromium [16] a Google Chrome [17] , Safari , Opera . Kliknutím na takové odkazy nedojde k navigaci ani zobrazení chybové zprávy, i když chybová zpráva může být zaznamenána v chybové konzoli. Obsah na adrese URL souboru se také nenačte do rámců dokumentu HTML načteného na adrese URL HTTP. Tato bezpečnostní politika byla zavedena kvůli skutečnosti, že takové odkazy způsobují řadu zranitelností:
V rámci boje s druhou zranitelností byla také zavedena zásada nazvaná „ Pravidlo omezení domény “ ( stejná zásada původu ), podobná stejnojmenné zásadě, která byla dříve zavedena pro weby v zóně http. Mozilla Firefox, který tuto zásadu zavedl ve verzi prohlížeče 3 ( motor Gecko 1.9) v roce 2007, byl jedním z prvních, kdo tak učinil (trvalo 3 roky, než vývojáři Firefoxu tuto zásadu prodiskutovali a implementovali [19] ). Podle tohoto pravidla může soubor číst jiný soubor pouze v případě, že nadřazeným adresářem zdrojového souboru je nadadresář cílového souboru [20] . Společnost Microsoft byla dříve přísnější a obecně zakázala spouštění Javascriptu při otevírání jakýchkoli místních souborů, počínaje aplikací Internet Explorer 6 v systému Windows XP SP2 a přidala možnost uživatelům spouštět skript výběrem speciálního příkazu z rozbalovací nabídky. Safari 3.2 neumožňuje uživateli otevřít adresy URL místních souborů z jiného zdroje než z adresního řádku. Opera 9.6 neumožňuje lokálním html stránkám načítat vzdálený obsah (to ale nechrání před možností, že by se útočník dostal k datům v počítači). Chromium (a na něm závislý Google Chrome) implementoval politiku podobnou zásadě Opery [21] a vzal v úvahu také politiku Firefoxu, ale později implementoval ještě přísnější politiku [22] tím, že zakázal adresy URL souborů pro skripty na místních webových stránkách na adrese všechny (později bylo rozhodnuto tuto politiku zmírnit).
V důsledku těchto omezení se objevilo mnoho stížností, protože narušují místní stránky a webové adresáře, které jsou široce používány v mnoha podnikových a místních sítích, v distribucích CD, v přílohách e-mailů a jsou také používány webovými vývojáři k ladění. . Například v Mozille o tom bylo zavedeno několik desítek duplicitních chyb [15] . Proto byla v prohlížečích podporována možnost tuto zásadu obejít, zakázat nebo nakonfigurovat a objevily se články, které navrhují, jak to udělat. V aplikaci Internet Explorer je tedy tato zásada konfigurována parametrem „Webové stránky v zóně méně privilegovaného webového obsahu mohou přejít do této zóny“ v nastavení zóny „Můj počítač“ nebo jiné. Tento zákaz se také obchází přidáním webových stránek, které neznepokojují zónu Důvěryhodné servery aplikace Internet Explorer . V Mozilla Firefox se tento zákaz obchází pomocí rozšíření LocalLink, Local Filesystem Links, IE Tab; nebo speciální nastavení bezpečnostní politiky (pro skupinu webů je vytvořena speciální zóna s vlastním specifickým nastavením zabezpečení) [14] . V prohlížeči Google Chrome od verze 7 lze toto omezení obejít spuštěním prohlížeče s příznakem --allow-file-access-from-files nebo použitím rozšíření LocalLinks. Chromium se také rozhodl uvolnit zásadu „ Domain Restriction Rule “ pro adresy URL souborů [23] v důsledku četných stížností .
Hlavní omezení bezpečnostní politiky v prohlížečích jsou uvedena v tabulce [Poznámka 2. 1] .
Popis testu | MSIE6 [Poznámka v.2. 2] | MSIE7 [Poznámka v.2. 3] | MSIE8 [Poznámka v.2. čtyři] | FF2 [Poznámka v.2. 5] | FF3 [Poznámka v.2. 6] | Safari [Poznámka v.2. 7] | Opera [Poznámka v.2. osm] | Chrome [Poznámka v.2. 9] |
---|---|---|---|---|---|---|---|---|
Mají místní HTML přístup k nesouvisejícím místním souborům přes DOM? | Ano | Ano | Ano | Ano | Ne | Ne | Ano | Ne |
Mají místní HTML přístup k nesouvisejícím místním souborům prostřednictvím XMLHttpRequest? | Ne | Ne | Ne | Ano | Ne | Ne | Ano | Ne |
Mají místní HTML přístup k webům na internetu prostřednictvím XMLHttpRequest? | Ano | Ano | Ano | Ne | Ne | Ne | Ne | Ne |
Funguje document.cookie s URL souboru? | Ano | Ano | Ano | Ano | Ano | Ano | Ano | Ne |
Je povoleno načíst značku <IMG> s URI souboru? | Ano | Ano | Ano | Ne | Ne | Ne | Ne | Ne |
Je povoleno načíst značku <SCRIPT> s URI souboru? | Ano | Ano | Ano | Ne | Ne | Ne | Ne | Ne |
Je povoleno načíst značku <IFRAME> s URI souboru? | Ano | Ano | Ano | Ne | Ne | Ne | Ne | Ne |
Je povoleno načíst značku <EMBED> s identifikátorem URI souboru? | Ne | Ne | Ne | Ne | Ne | Ne | Ne | Ne |
Je povoleno načíst značku <APPLET> s URI souboru? | Ano | Ano | Ano | Ne | Ne | Ano | Ne | Ano |
Je možné načíst styly (stylesheet) přes soubor URI? | Ano | Ano | Ano | Ne | Ne | Ne | Ne | Ne |
Jsou povolena přesměrování polohy prostřednictvím URI souboru? | Ne | Ne | Ne | Ne | Ne | Ne | Ne | Ne |
Jsou přes URI souboru povolena přesměrování Obnovit? | Ne | Ne | Ne | Ne | Ne | Ne | Ne | Ne |
Útok XXE ( Xml eXternal Entity ) je jednou z nejznámějších zranitelností na internetu. Tato třída zranitelností je registrována v největších katalozích zranitelností: Common Weakness Enumeration [26] a CAPEC [27] . Podstata útoku je následující. Existují služby, které podporují protokoly SOAP a XML-RPC, které přijímají vstup ve formě dokumentu XML . Standard dokumentu XML podporuje zahrnutí sekce DTD a sekce DTD zase mohou k dokumentu připojovat další komponenty, tzv . externí entity [ 28 ] . Externí entity jsou samostatné soubory a jsou určeny pomocí klíčového slova SYSTEM a URI. Pokud analyzátor XML není validní, může jednoduše načíst externí entitu a připojit ji k obsahu dokumentu XML. Útočník může v URI souboru externí entity nahradit URI odkazující na hardwarové zařízení počítače nebo na místní soubor v systému. Server se pokusí přečíst soubor na zadaném URI a zahrnout jeho obsah do XML. Při použití takového mechanismu jsou možné následující typy útoků [29] :
O zranitelnosti XXE v komunitě http://xml.org (web neziskové organizace OWASP ) se diskutuje již od roku 2001 [30] , ale byly to pouze teoretické úvahy o možnosti útoku tohoto druhu. První osobou, která na tuto zranitelnost upozornila veřejnost, byl Gregory Steuck [31 ] . V roce 2002 zaslal na www.securityfocus.com [29] bezpečnostní radu (bezpečnostní manuál ) , ve které zranitelnost podrobně popsal a pojmenoval ji XXE Attack .
Mnoho produktů bylo zasaženo útokem XXE. Všechny hlavní databáze softwarových zranitelností mohou najít softwarové produkty zranitelné vůči útokům XXE: National Vulnerability Database [32] , Common Vulnerabilities and Exposures [33] , Open Source Vulnerability Database [34] . Zranitelnost vůči "XXE útokům" byla objevena v tak známých produktech jako JDK a JRE (6. verze, 3. aktualizace) [33] [35] , WebKit a na něm založený prohlížeč Safari (3. verze) [ 36] [37] , Spring Framework [38] , CakePHP [39] , Adobe Reader (Verze 7) [40] , Zend Framework [41] , Squiz [42] atd.
Souborové schéma URI bylo poprvé popsáno v červnu 1994 v informačním RFC 1630 ("Universal Resource Identifiers in WWW"). V prosinci téhož roku byl standardizován v RFC 1738 (Uniform Resource Locators (URL)). RFC 1738 popisuje obecný formát URL a je nyní zastaralý, s výjimkou dvou částí, které popisují schémata souborů a ftp. Nový RFC 3986 (Uniform Resource Identifier (URI): Generic Syntax), vydaný v roce 2005, obsahoval RFC 1738 , provedl drobné změny, ale nepopisoval jednotlivá schémata. Do té doby téměř všechna schémata ze stálé sekce obdržela svůj vlastní samostatný standard. Starý RFC 1738 uváděl pouze formát schématu, ale nedefinoval pravidla pro aplikaci tohoto schématu a převod místní cesty na URI a naopak. Bylo potřeba standardizovat souborové schéma, stejně jako řadu dalších nestandardizovaných schémat.
V roce 2004 zahájil Paul Hoffman, který je členem IETF od počátku 90. let, proces standardizace souborového schématu. Během června napsal samostatné specifikace pro schémata file, ftp, gopher, news a nntp, prospero a telnet a 17. června 2004 byly zveřejněny na webu ietf.org a 19. června to oznámil na mailing listu [43] . První revize standardu souborového schématu se jmenovala "Schéma URI souboru" [44] . 19. června Paul Hoffman oznámil, že návrh zahájil aktivní diskusi. Od komunity IETF bylo mnoho připomínek a brzy následovala druhá revize [45] následovaná třetí [46] a čtvrtou [47] . Nikdy však nebylo dosaženo konsensu. Aby Mike Brown pokračoval v práci na standardu, vytvořil speciální wiki stránku https://offset.skew.org/wiki/URI/File_scheme , kde se nějakou dobu pracovalo na sběru informací týkajících se souborového schématu. Brzy však tato činnost utichla a standard nebyl nikdy přijat.
V roce 2013 udělal Matthew Kerwin další pokus o standardizaci souborového schématu. V červnu 2013 byla zveřejněna první revize návrhu [48] , začalo projednávání návrhu a v průběhu června-září bylo zveřejněno 8 dalších revizí. Poslední (#8, tedy devátá [Poznámka 4] ) revize návrhu byla zveřejněna 18. září 2013 [49]
URI | Schémata|
---|---|
Oficiální | |
neoficiální |