A fájl URI séma egy RFC 8089 , RFC 1630 , RFC 1738 és RFC 3986 szabványban dokumentált URI séma , amelyet arra terveztek , hogy a helyi számítógépen vagy helyi hálózaton lévő fájlokat a lemezen, hálózati mappában vagy bizonyos esetekben ftp szerveren. Az URI - sémafájl regisztrálva van az IANA URI-séma-nyilvántartásban [1] , és az „Állandó URI-sémák” részben található.
A fájlséma az egyik legrégebbi URI séma . Az internet hajnala óta szoftverekben testesül meg. A WorldWideWeb , az első webböngésző, amelyet 1991-ben Tim Berners-Lee , a World Wide Web feltalálója hozott létre, támogatta a fájlsémát . Az RFC 1630 specifikációt , amelyben először dokumentálták, szintén Tim Berners-Lee írta 1994 júniusában, a W3C létrehozása előtt , és ez az egyik legrégebbi internetes specifikáció.
Az ftp -séma bevezetése előtt a fájlsémát használták az ftp-szervereken található fájlok hivatkozására. Tim Berners-Lee maga javasolta a fájlséma használatát az URL - ben az ftp protokollon keresztül elérhető fájlok hivatkozásainál , és maga is használt ilyen hivatkozásokat publikációi [2] Hivatkozások részében . A Lynx böngésző , az egyik legrégebbi fennmaradt böngésző, a fájl [3] sémájának ezt az értelmezését a mai napig megőrizte .
A legtöbb ismert sémától eltérően (pl. http, nfs, sip, telnet stb.) a fájlséma nem protokoll. Ezt az RFC 1738 kifejezetten kimondja : "Ennek a sémának az egyik jellemzője, hogy nem határoz meg internetprotokollt vagy fájlelérési módot, így a hosztok közötti hálózati protokollokban korlátozott a használata" [4] . A fájlséma egyszerűen megadja a fájl elérési útját URL-ként ( vagy URI-ként) egy adott gépen. Azt is mondja, hogy "ez a séma, ellentétben a legtöbb más URL-sémával, nem határoz meg olyan erőforrást, amely nyilvánosan elérhető az interneten."
A fájlsémát minden népszerű böngésző támogatja, minden operációs rendszeren, bár egy nagyon régi szabványon alapul, amely leírja az URL formátumot, de még nincs saját. De a fenti tulajdonságok miatt használata korlátozott. A címsávban működik, de ez a séma szinte soha nem található meg a webhelyek HTML -jelölésében. Egy új sémát , az alkalmazást fejlesztettek ki a fájl lecserélésére . Az alkalmazássémát a 2013. május 16-i W3C -ajánlás írja le [5]
A sémafájlt tartalmazó URL formátuma [4] :
file:// <host> / <elérési út>ahol a gazdagép a teljes képzésű tartománynév azon a rendszeren, ahol elérhető az elérési út , az elérési út pedig egy hierarchikus könyvtár elérési útja a könyvtár / könyvtár /.../ fájlnév formátumban . Ha a gazdagépet kihagyjuk, az alapértelmezett a „localhost”, az a gazdagép, amelyen az URL-t elemzi. 2005 előtt a szabványnak volt egy olyan követelménye, hogy a gazdagép elhagyása esetén a megfelelő perjel vagy dupla perjel nem hagyható ki (a "file:///foo.txt" működik, de a "file://foo.txt" nem fog , bár néhány elemző képes volt kezelni ezt az esetet). A 2005-ben kiadott RFC 3986 megszüntette ezt a követelményt. Az RFC 3986 szerint a jogosultság elhagyása (jelen esetben a host -nak felel meg ) a dupla perjelet (//) is elhagyja.
A perjel (/) az URI-ban elfoglalt pozíciótól függően eltérő jelentéssel bír.
A bejelentkezési név (felhasználónév), jelszó (jelszó) és port (port) összetevőket nem használják a fájlsémával rendelkező URL-ekben. Ugyanakkor a paraméterek (lekérdezési karakterlánc) és a horgony (töredékazonosító) komponenseket [6] maga az alkalmazás is használhatja, megjelenítve az adott fájl URL-címének tartalmát. Például egy HTML -dokumentumban található szkript képes beolvasni a paramétereket, és egy horgony használható szabványos módon a dokumentumban való navigáláshoz.
A fájlok URL-címei karakterkészletben különböznek a hagyományos URL-ektől és a fájlrendszerek fájlútvonalaitól. Mivel a fájlrendszerek elérési útjai tartalmazhatnak az URL-ekben szolgáltatási célból fenntartott karaktereket ('#', '%' stb.), az ilyen karakterek (korábban szóköz is ' ') kódolásra kerülnek, amikor egy elérési utat fájl URL-címmé alakítanak át . Ugyanakkor, ellentétben az URL-lel, a fájl URL-jében ajánlatos idegen ábécé karaktereit használni (vagyis nem az US-ASCII táblából) úgy, ahogy van, azaz URL-kódolás nélkül [6] . Ennek az az oka, hogy a fájl URL-jében található URL-kódolású oktetteket a rendszer bájtként kezeli a felhasználó aktuális kódlapján, ami azt jelenti, hogy az URL értéke attól függően változik, hogy a dokumentumot milyen nyelven tekintik meg [6] .
4 Unix példa , amely ugyanarra az / etc / fstab fájlra mutat :
file://localhost/etc/fstab file:///etc/fstab file:///etc/./fstab file:///etc/../etc/fstabPélda az rfc959.txt fájlra mutató hivatkozásra, amely az nnsc.nsf.net ftp-kiszolgálón található [Megjegyzés. 1] :
file://nnsc.nsf.net/rfc/rfc959.txt Mac OS2 példa Mac OS rendszeren , amelyek ugyanarra a /var/log/system.log fájlra mutatnak :
file://localhost/var/log/system.log file:///var/log/system.log WindowsPéldák a Windows alkalmazások által támogatott elérési utakra, amelyek a c: \ WINDOWS \ clock.avi fájlra mutatnak :
file://localhost/c|/WINDOWS/clock.avi file:///c|/WINDOWS/clock.avi file://localhost/c:/WINDOWS/clock.avi file:///c:/WINDOWS/clock.aviPélda a start.swf fájl elérési útjára, amely a hálózati mappatermékekben található egy applib [7] nevű számítógépen :
file://applib/products/ab/abc_9/4148.920a/media/start.swfPéldafájl URI %-kódolt karakterekkel és Unicode karakterrel [7] (Internet Explorer 6 és 7 esetén előfordulhat, hogy a %20 példa nem működik [8] ):
file:///C:/Documents%20and%20Settings/davris/FileSchemeURIs.doc file:///C:/exampleㄓ.txtBöngésző | Fájlséma támogatás (localhost) | Üres gazdagép ( file:/// ) | Hálózati gazdagép | Meghajtóbetűjel az útvonalban ( C: ) [Pl. v. 1] | Mappa áttekintése | URL kódolt karakterek | fájl hivatkozások html -ben |
---|---|---|---|---|---|---|---|
Google Chrome | Igen | Igen | GYŐZ | Igen | Igen | Igen | Igen |
internet böngésző | Igen | Igen | GYŐZ | Igen | Nem | Igen | Igen |
Konqueror | Igen | Igen | ? | - | Igen | Igen | Igen |
Hiúz | Igen | Igen | FTP | Igen | Igen | Igen | Igen |
Mozilla Firefox | Igen | Igen | WINS [Pl. 2. v.] | Igen | Igen | Igen | Igen |
Opera | Igen | Igen | GYŐZ | Igen | Igen | Igen | Igen |
szafari | Igen | ? | ? | - | Nem | ? | ? |
Yandex böngésző | Igen | Igen | GYŐZ | Igen | Igen | Igen | Igen |
A fájl URI sémát eredetileg a Windows támogatta, azaz. az URI támogatás megjelenésével [Megjegyzés. 2] általában, és konkrétan az Internet Explorer 1 [10] kiadásával . Az Internet Explorer első verzióját 1995-ben fejlesztették ki, amikor még nem létezett az URL szabvány, és a fájlsémát többféleképpen lehetett értelmezni, ami a böngészővel meg is történt. Különböző moduljai eltérően kezelték a fájlsémát. Átdolgozás után ez a helyzet megszűnt. Létrejött az shlwapi.dll fájl , amelybe az URL-lel való munkavégzéshez szükséges összes kódot elhelyezték. Az átdolgozás során a fájlséma két formáját egyeztették: az egyik az URL szabvány szerint, a másik egy régi forma, amely a DOS idejéből származott. A Microsoft alkalmazottai örökölt fájl URL-nek (elavult fájl URL-nek) nevezték el. Példák a régi fájl URL-jére:
Fájl elérési útja: c:\windows\My Documents 100%20\foo.txt A régi fájl URL-je: file://c:\windows\My Documents 100%20\foo.txt Szabványos fájl URL-címe: file:///c:/windows/My%20Documents%20100%2520/foo.txt Fájl elérési útja: \\server\share\My Documents 100%20\foo.txt A régi fájl URL-je: file://\\server\share\My Documents 100%20\foo.txt Szabványos fájl URL-cím: file://server/share/My%20Documents%20100%2520/foo.txtAz új dll mind az új, mind a régi fájl URL-eket helyesen kezeli, ezért a PathCreateFromUrl() és UrlCreateFromPath() függvényei a Windows elérési utak és a fájl URL-ek közötti konvertáláshoz ajánlottak [6] [11] .
Ezeken a függvényeken kívül az urlmon.dll-ben létrejött a CreateURLMoniker() függvény ( Internet Explorer 3 -tól kezdve ), hogy egy karakterlánc-URI-t olyan objektummá alakítson át, amellyel az adatok az adott URI-hoz ( moniker ) címezhetők. De ez a funkció okozott némi gondot az URI [11] fájl konvertálásakor is , aminek eredményeként egy új CreateURLMonikerEx() függvény került beépítésre és ajánlott ( Internet Explorer 5.5 -től kezdődően ), melyben ezeket a problémákat kijavították. Az Internet Explorer 7 kiadásával egy másik CreateURLMonikerEx2() függvény is bekerült, amely támogatja a relatív elérési utat.
A szkriptnyelvek , például a JavaScript böngészők támogatásának megjelenésével és elterjedésével számos, a fájlséma használatával kapcsolatos sebezhetőséget fedeztek fel. Ennek eredményeként a böngészőgyártók számos beépített böngészőkorlátozást vezettek be a fájl URL-ek használatára vonatkozóan.
A HTTP-n keresztül betöltött HTML-dokumentumokban a fájlsémára mutató hivatkozások nem működnek szinte minden népszerű böngészőben: Internet Explorer (6-os SP1-től) [12] [Megjegyzés. 3] , Mozilla Firefox [14] [15] , Chromium [16] és Google Chrome [17] , Safari , Opera . Az ilyen hivatkozásokra kattintva nem navigál, és nem jelenik meg hibaüzenet, bár előfordulhat, hogy a hibaüzenet naplózásra kerül a hibakonzolon. Ezenkívül a fájl URL-címén található tartalom nem töltődik be a HTTP URL-címen betöltött HTML-dokumentumok kereteibe. Ezt a biztonsági szabályzatot azért vezették be, mert az ilyen hivatkozások számos sebezhetőséget okoznak:
A második sebezhetőség leküzdése érdekében bevezették a „ Domain korlátozási szabály ” ( azonos származási szabályzat ) elnevezésű szabályzatot is, hasonlóan a http zónában lévő webhelyekre korábban bevezetett azonos nevű szabályzathoz. A Mozilla Firefox, amely 2007-ben vezette be ezt az irányelvet a böngésző 3-as verziójában ( Gecko 1.9 motor), az elsők között tette ezt meg (3 évbe telt, amíg a Firefox fejlesztői megvitatták és végrehajtották ezt az irányelvet [19] ). E szabály szerint egy fájl csak akkor tud másik fájlt olvasni, ha a forrásfájl szülőkönyvtára a célfájl szuperkönyvtára [20] . A Microsoft korábban szigorúbb volt, és általában letiltotta a Javascript végrehajtását a helyi fájlok megnyitásakor, kezdve az Internet Explorer 6 -tal a Windows XP SP2 rendszerben, és lehetővé tette a felhasználók számára, hogy a szkriptet egy előugró menüből egy speciális parancs kiválasztásával hajtsák végre. A Safari 3.2 nem teszi lehetővé a felhasználó számára, hogy a címsoron kívül más forrásból nyissa meg a helyi fájlok URL-címeit. Az Opera 9.6 nem teszi lehetővé a helyi html oldalak távoli tartalom betöltését (de ez nem véd az ellen, hogy egy támadó hozzáférjen a számítógépen lévő adatokhoz). A Chromium (és a függő Google Chrome) az Operához hasonló házirendet implementált [21] , és figyelembe vette a Firefox szabályzatát is, de később még szigorúbb szabályzatot [22] vezetett be azzal, hogy letiltotta a fájlok URL-címét a helyi weboldalakon a szkriptekhez. minden (később úgy döntöttek, hogy lazítanak ezen a politikán).
Számos panasz érkezett ezekre a korlátozásokra, mivel zavarják a helyi webhelyeket és webcímtárakat, amelyeket számos vállalati és helyi hálózatban széles körben használnak, CD-terjesztésben, e-mail mellékletekben, és a webfejlesztők is használják hibakeresésre. webhelyek. Például több tucat duplikált bugot vezettek be ezzel kapcsolatban a Mozillában [15] . Ezért a böngészők támogatják a házirend megkerülését, letiltását vagy konfigurálását, és megjelentek olyan cikkek, amelyek ennek módját javasolják. Tehát az Internet Explorerben ezt a házirendet a „Sajátgép” zóna beállításainál a „Kisebb kiváltságokkal rendelkező webtartalom zónában lévő webhelyek navigálhatnak ebbe a zónába” paraméterrel konfigurálják. Ezenkívül ez a tilalom megkerülhető olyan webhelyek hozzáadásával, amelyek ne okozzon aggodalmat az Internet Explorer megbízható helyek zónájának . A Mozilla Firefoxban ez a tiltás megkerülhető a LocalLink, Local Filesystem Links, IE Tab kiterjesztéssel; vagy egy speciális biztonsági házirend-beállítás (egy speciális zóna jön létre a webhelyek egy csoportjához saját speciális biztonsági beállításokkal) [14] . A Google Chrome 7-es verziójától kezdődően ez a korlátozás megkerülhető a böngésző --allow-file-access-from-files jelzővel történő elindításával vagy a LocalLinks bővítmény használatával. A Chromium számos panasz eredményeként úgy döntött, hogy enyhíti a " Domain Restriction Rule " szabályait a fájlok URL-jére [23] .
A böngészők biztonsági szabályzatának fő korlátait a táblázat tartalmazza [Megjegyzés 2. 1] .
Teszt leírása | MSIE6 [Megjegyzés v.2. 2] | MSIE7 [Megjegyzés v.2. 3] | MSIE8 [Megjegyzés v.2. négy] | FF2 [Megjegyzés v.2. 5] | FF3 [Megjegyzés v.2. 6] | Safari [Megjegyzés v.2. 7] | Opera [Megjegyzés v.2. nyolc] | Chrome [Megjegyzés v.2. 9] |
---|---|---|---|---|---|---|---|---|
A helyi HTML-ek hozzáférhetnek nem kapcsolódó helyi fájlokhoz a DOM-on keresztül? | Igen | Igen | Igen | Igen | Nem | Nem | Igen | Nem |
A helyi HTML-ek hozzáférhetnek a nem kapcsolódó helyi fájlokhoz az XMLHttpRequest segítségével? | Nem | Nem | Nem | Igen | Nem | Nem | Igen | Nem |
A helyi HTML-ek hozzáférhetnek az internet webhelyeihez az XMLHttpRequest segítségével? | Igen | Igen | Igen | Nem | Nem | Nem | Nem | Nem |
Működik a document.cookie a fájl URL-címével? | Igen | Igen | Igen | Igen | Igen | Igen | Igen | Nem |
Letölthető az <IMG> címke URI fájllal? | Igen | Igen | Igen | Nem | Nem | Nem | Nem | Nem |
Letölthető a <SCRIPT> címke URI fájllal? | Igen | Igen | Igen | Nem | Nem | Nem | Nem | Nem |
Letölthető az <IFRAME> címke URI fájllal? | Igen | Igen | Igen | Nem | Nem | Nem | Nem | Nem |
Be lehet tölteni az <EMBED> címkét egy fájl URI-val? | Nem | Nem | Nem | Nem | Nem | Nem | Nem | Nem |
Megengedett az <APPLET> címke betöltése URI fájllal? | Igen | Igen | Igen | Nem | Nem | Igen | Nem | Igen |
Lehet stílusokat (stíluslapot) betölteni az URI fájlon keresztül? | Igen | Igen | Igen | Nem | Nem | Nem | Nem | Nem |
Engedélyezett-e a helyátirányítás az URI fájlon keresztül? | Nem | Nem | Nem | Nem | Nem | Nem | Nem | Nem |
Engedélyezettek a Refresh átirányítások az URI-n keresztül? | Nem | Nem | Nem | Nem | Nem | Nem | Nem | Nem |
Az XXE ( Xml eXternal Entity ) támadás az egyik leghíresebb sebezhetőség az interneten. A sérülékenységek ezen osztálya a legnagyobb sebezhetőségi katalógusokban található: Common Weakness Enumeration [26] és CAPEC [27] . A támadás lényege a következő. Vannak olyan szolgáltatások, amelyek támogatják a SOAP és XML-RPC protokollokat , amelyek XML dokumentum formájában fogadják a bemenetet . Az XML dokumentumszabvány támogatja a DTD szakasz beépítését, a DTD szekciók pedig további komponenseket, úgynevezett külső entitásokat kapcsolhatnak a dokumentumhoz [ 28 ] . A külső entitások külön fájlok, és a SYSTEM kulcsszóval és URI-val vannak megadva. Ha az XML-elemző nem érvényesít, egyszerűen betöltheti a külső entitást, és csatolhatja az XML-dokumentum tartalmához. A támadó a külső entitásfájl URI-jában helyettesítheti a számítógép hardvereszközére vagy a rendszerben lévő helyi fájlra mutató URI-t. A szerver megpróbálja beolvasni a fájlt a megadott URI-n, és belefoglalja a tartalmát az XML-be. Egy ilyen mechanizmus használatakor a következő típusú támadások lehetségesek [29] :
A http://xml.org közösségben (az OWASP non-profit szervezet webhelye) található XXE sebezhetőségről 2001 óta beszélnek [30] , de ezek csak elméleti gondolatok voltak egy ilyen jellegű támadás lehetőségéről. Az első személy, aki felhívta a nyilvánosság figyelmét erre a sebezhetőségre, Gregory Steuck volt [31 ] . 2002-ben biztonsági tanácsot (security manual ) küldött a www.securityfocus.com [29] címre , amelyben részletesen leírta a sérülékenységet, és az XXE Attack nevet adta neki .
Sok terméket érintett az XXE támadás. A szoftversérülékenységek összes jelentős adatbázisa találhat XXE támadásokkal szemben sérülékeny szoftvertermékeket: National Vulnerability Database [32] , Common Vulnerability and Exposures [33] , Open Source Vulnerability Database [34] . Az "XXE támadásokkal" szembeni sebezhetőséget olyan ismert termékeknél fedezték fel, mint a JDK és a JRE (6. verzió, 3. frissítés) [33] [35] , a WebKit és az arra épülő böngésző Safari (3. verzió) [36] [37] , Spring Framework [38] , CakePHP [39] , Adobe Reader (7-es verzió) [40] , Zend Framework [41] , Squiz [42] stb.
Az URI fájlsémát először 1994 júniusában írták le az RFC 1630 ("Universal Resource Identifiers in WWW") tájékoztató jellegű dokumentumban. Ugyanezen év decemberében szabványosították az RFC 1738 -ban (Uniform Resource Locators (URL)). Az RFC 1738 az általános URL-formátumot írja le, és mára elavult, kivéve két szakaszt, amelyek a fájl- és ftp-sémákat írják le. A 2005-ben kiadott új RFC 3986 (Uniform Resource Identifier (URI): Generic Syntax), amely magában foglalta az RFC 1738 -at , kisebb változtatásokat végzett, de nem írt le egyedi sémákat. Addigra az állandó részleg szinte minden rendszere megkapta a saját szabványát. A régi RFC 1738 csak a séma formátumát írta elő, de nem határozta meg a séma alkalmazásának szabályait, valamint a helyi elérési út URI-vé alakítását és fordítva. Szükség volt a fájlséma szabványosítására, valamint számos más, nem szabványosított sémára.
2004-ben Paul Hoffman, aki az 1990-es évek eleje óta tagja az IETF-nek, megkezdte a fájlséma szabványosításának folyamatát. Június folyamán külön specifikációkat írt a fájl, ftp, gopher, news és nntp, prospero és telnet sémákhoz, majd 2004. június 17-én közzétették az ietf.org weboldalon, majd június 19-én bejelentette. a levelezőlistán [43] . A fájlséma-szabvány első változatának neve "The file URI Scheme" [44] volt . Június 19-én Paul Hoffman bejelentette, hogy a tervezet aktív vitát kezdett. Sok megjegyzés érkezett az IETF közösségétől, és hamarosan a második verzió [45] , majd a harmadik [46] és a negyedik [47] következett . De soha nem sikerült konszenzusra jutni. A szabványon való munka folytatásához Mike Brown létrehozott egy speciális wiki webhelyet https://offset.skew.org/wiki/URI/File_scheme , ahol egy ideig dolgoztak a fájlsémával kapcsolatos információk gyűjtésén. De ez a tevékenység hamarosan megszűnt, és a szabványt soha nem fogadták el.
2013-ban Matthew Kerwin újabb kísérletet tesz a fájlséma szabványosítására. 2013 júniusában megjelent a tervezet első revíziója [48] , megkezdődött a tervezet vitája, június-szeptember folyamán pedig további 8 revízió jelent meg. A tervezet legutóbbi (8., azaz kilencedik [4. megjegyzés] ) revíziója 2013. szeptember 18-án jelent meg [49]
URI- sémák | |
---|---|
Hivatalos | |
nem hivatalos |