Tiedoston URI-malli on RFC 8089 , RFC 1630 , RFC 1738 ja RFC 3986 dokumentoitu URI-malli , joka on suunniteltu osoittamaan paikallisen tietokoneen tai paikallisen verkon tiedostot niiden suoran polun kautta levyllä, verkkokansiossa tai joissakin tapauksissa ftp-palvelimella. URI - skeematiedosto on rekisteröity IANA URI Scheme Registry -rekisteriin [1] ja se on lueteltu "Pysyvät URI-järjestelmät" -osiossa.
Tiedostomalli on yksi vanhimmista URI - järjestelmistä . Se on sisältynyt ohjelmistoihin Internetin kynnyksellä. WorldWideWeb , ensimmäinen web-selain , jonka World Wide Webin keksijä Tim Berners-Lee loi vuonna 1991, tuki tiedostojärjestelmää . RFC 1630 -spesifikaatio , jossa se ensimmäisen kerran dokumentoitiin, on myös Tim Berners-Leen kirjoittama kesäkuussa 1994, ennen W3C :n luomista , ja se on yksi vanhimmista Internet-spesifikaatioista.
Ennen ftp -mallin käyttöönottoa tiedostomallia käytettiin viittaamaan ftp-palvelimilla sijaitseviin tiedostoihin. Tim Berners-Lee itse ehdotti tiedostomallin käyttöä URL -osoitteessa linkeissä tiedostoihin, joihin pääsee ftp-protokollan kautta , ja hän itse käytti tällaisia linkkejä julkaisujensa Viitteet-osiossa [2] . Lynx - selain , yksi vanhimmista säilyneistä selaimista, on säilyttänyt tämän tulkinnan tiedostoskeemasta [3] tähän päivään asti .
Toisin kuin useimmat tunnetut mallit (esim. http, nfs, sip, telnet jne.), tiedostomalli ei ole protokolla. Tämä on nimenomaisesti todettu RFC 1738 :ssa: "Tämän mallin ominaisuus on, että se ei määritä Internet-protokollaa tai tiedostojen käyttötapaa, joten sen käyttö verkkoprotokollassa isäntien välillä on rajoitettua" [4] . Tiedostomalli yksinkertaisesti määrittää tiedoston polun URL -osoitteena (tai URI-osoitteena) tietyssä koneessa. Siinä sanotaan myös, että "tämä malli, toisin kuin useimmat muut URL-mallit, ei määrittele resurssia, joka on julkisesti saatavilla Internetin kautta."
Tiedostojärjestelmää tukevat kaikki suositut selaimet kaikissa käyttöjärjestelmissä, vaikka se perustuukin hyvin vanhaan URL-muotoa kuvaavaan standardiin, mutta sillä ei vielä ole omaa . Mutta yllä olevien ominaisuuksien vuoksi sen käyttö on rajoitettua. Se toimii osoitepalkissa, mutta tätä mallia ei juuri koskaan löydy verkkosivustojen HTML -merkinnöistä. Uusi malli , sovellus , on kehitetty korvaamaan tiedosto . Sovellusmalli on kuvattu 16. toukokuuta 2013 annetussa W3C - suosituksessa [5]
Kaavatiedoston URL-osoite on muotoa [4] :
file:// <isäntä> / <polku>jossa isäntä on täysin pätevä toimialueen nimi järjestelmässä, jossa polku on käytettävissä , ja polku on hierarkkinen hakemistopolku muodossa hakemisto / hakemisto /.../ tiedostonimi . Jos isäntä jätetään pois, oletusarvo on "localhost", isäntä, jolla URL-osoite jäsennetään. Ennen vuotta 2005 standardissa oli vaatimus, että jos isäntä jätetään pois, niin vastaavaa kauttaviivaa tai kaksoisviivaa ei voi jättää pois ("file:///foo.txt" toimii, mutta "file://foo.txt" ei, vaikka jotkut jäsentimet pystyivät käsittelemään tämän tapauksen). Vuonna 2005 julkaistu RFC 3986 poisti tämän vaatimuksen. RFC 3986 :n mukaan auktoriteetin jättäminen pois (tässä tapauksessa isäntä vastaa ) jättää pois myös kaksoisviivan (//).
Kenoviivalla (/) on eri merkitys riippuen sijainnista URI:ssa.
Kirjautumistunnus ( käyttäjänimi), salasana (salasana) ja portti (portti) -komponentteja ei käytetä URL-osoitteissa, joissa on tiedostomalli. Mutta samaan aikaan sovellus itse voi käyttää parametreja (kyselymerkkijono) ja ankkuri (fragmenttitunniste) -komponentteja [6] näyttäen tietyn tiedoston URL-osoitteen sisällön. Esimerkiksi HTML - dokumentin sisällä oleva komentosarja voi lukea parametrit, ja ankkuria voidaan käyttää tavallisella tavalla asiakirjassa navigoimiseen.
Tiedostojen URL-osoitteet eroavat merkistöltä sekä perinteisistä URL-osoitteista että tiedostojärjestelmien tiedostopoluista. Koska tiedostojärjestelmien polut voivat sisältää merkkejä, jotka on varattu URL-osoitteisiin palvelutarkoituksiin ("#", "%" jne.), tällaiset merkit (aiemmin myös välilyönti "") koodataan , kun polku muunnetaan tiedoston URL-osoitteeksi . Mutta samaan aikaan, toisin kuin URL-osoitteessa, tiedoston URL-osoitteessa on suositeltavaa käyttää vieraiden aakkosten merkkejä (eli ei US-ASCII-taulukosta) sellaisenaan, eli ilman URL-koodausta [6] . Tämä johtuu siitä, että tiedoston URL-osoitteessa olevia URL-koodattuja oktetteja käsitellään tavuina käyttäjän nykyisellä koodisivulla, mikä tarkoittaa, että URL-osoitteen arvo muuttuu riippuen siitä, missä maassa asiakirjaa tarkastellaan [6] .
4 Unix - esimerkkiä , jotka osoittavat samaan / etc / fstab - tiedostoon :
file://localhost/etc/fstab file:///etc/fstab file:///etc/./fstab file:///etc/../etc/fstabEsimerkki linkistä rfc959.txt-tiedostoon, joka sijaitsee nnsc.nsf.net ftp-palvelimella [Huom. 1] :
file://nnsc.nsf.net/rfc/rfc959.txt Mac OS2 esimerkkiä Mac OS : stä , jotka osoittavat samaan /var/log/system.log-tiedostoon :
file://localhost/var/log/system.log file:///var/log/system.log WindowsEsimerkkejä Windows -sovellusten tukemista poluista, jotka osoittavat c: \ WINDOWS \ clock.avi -tiedostoon :
file://localhost/c|/WINDOWS/clock.avi file:///c|/WINDOWS/clock.avi file://localhost/c:/WINDOWS/clock.avi file:///c:/WINDOWS/clock.aviEsimerkkipolku start.swf- tiedostoon , joka sijaitsee verkkokansiotuotteissa tietokoneessa verkkonimellä applib [ 7] :
file://applib/products/ab/abc_9/4148.920a/media/start.swfEsimerkkitiedoston URI, jossa on %-koodattuja merkkejä ja Unicode-merkki [7] (Internet Explorer 6:ssa ja 7:ssä %20 -esimerkki ei ehkä toimi [8] ):
file:///C:/Documents%20and%20Settings/davris/FileSchemeURIs.doc file:///C:/exampleㄓ.txtSelain | Tiedostoskeeman tuki (localhost) | Tyhjä isäntä ( file:/// ) | Verkkoisäntä _ | Asemakirjain polussa ( C: ) [Esi. v. 1] | Kansion yleiskatsaus | URL-koodatut merkit | tiedostolinkit html -muodossa |
---|---|---|---|---|---|---|---|
Google Chrome | Joo | Joo | VOITTAA | Joo | Joo | Joo | Joo |
Internet Explorer | Joo | Joo | VOITTAA | Joo | Ei | Joo | Joo |
Konqueror | Joo | Joo | ? | - | Joo | Joo | Joo |
Ilves | Joo | Joo | FTP | Joo | Joo | Joo | Joo |
Mozilla Firefox | Joo | Joo | VOITOT [Ex. v. 2] | Joo | Joo | Joo | Joo |
Ooppera | Joo | Joo | VOITTAA | Joo | Joo | Joo | Joo |
safari | Joo | ? | ? | - | Ei | ? | ? |
Yandex selain | Joo | Joo | VOITTAA | Joo | Joo | Joo | Joo |
Tiedoston URI-mallia tuki alun perin Windows, ts. URI-tuen myötä [Huom. 2] yleisesti ja erityisesti Internet Explorer 1:n julkaisun yhteydessä [10] . Internet Explorerin ensimmäinen versio kehitettiin vuonna 1995, jolloin URL-standardia ei vielä ollut olemassa ja tiedostomallia voitiin tulkita eri tavoin, mikä tapahtui selaimen kanssa. Sen eri moduulit käsittelivät tiedostokaaviota eri tavalla. Uudelleentyöskentelyn jälkeen tämä tilanne poistettiin. shlwapi.dll luotiin , johon sijoitettiin kaikki URL-osoitteen kanssa työskentelemistä varten tarvittava koodi. Uudelleentyöskentelyn aikana sovittiin kaksi tiedostoskeemaa: yksi URL-standardin mukainen, toinen vanha muoto, joka tuli DOS-ajoilta. Microsoftin työntekijät kutsuivat sitä vanhan tiedoston URL-osoitteeksi (vanhentuneen tiedoston URL-osoite). Esimerkkejä vanhan tiedoston URL-osoitteesta:
Tiedostopolku: c:\windows\Omat asiakirjat 100%20\foo.txt Vanhan tiedoston URL-osoite: file://c:\windows\Omat asiakirjat 100%20\foo.txt Vakiotiedoston URL-osoite: file:///c:/windows/My%20Documents%20100%2520/foo.txt Tiedostopolku: \\palvelin\jako\Omat asiakirjat 100%20\foo.txt Vanhan tiedoston URL-osoite: file://\\server\share\My Documents 100%20\foo.txt Vakiotiedoston URL-osoite: file://server/share/My%20Documents%20100%2520/foo.txtUusi dll käsittelee sekä uusia että vanhoja tiedostojen URL-osoitteita oikein, joten sen PathCreateFromUrl()- ja UrlCreateFromPath()-funktioita suositellaan Windows-polkujen ja tiedostojen URL-osoitteiden muuntamiseen [6] [11] .
Näiden toimintojen lisäksi CreateURLMoniker()-funktio luotiin urlmon.dll-tiedostoon (alkaen Internet Explorer 3 :sta), joka muuntaa merkkijonon URI:n objektiksi, jota voidaan käyttää antamaan tiedot osoitettuna annettuun URI:hen ( moniker ). Mutta tämä toiminto aiheutti myös ongelmia tiedoston URI: n [11] muuntamisessa , minkä seurauksena uusi CreateURLMonikerEx()-toiminto lisättiin ja suositeltiin käytettäväksi ( Internet Explorer 5.5 :stä alkaen ), jossa kaikki nämä ongelmat korjattiin. Internet Explorer 7 : n julkaisun myötä lisättiin toinen CreateURLMonikerEx2()-funktio, joka tukee suhteellisia polkuja.
Selaintuen tullessa ja yleistyessä komentosarjakielille , kuten JavaScriptille , on löydetty useita tiedostojärjestelmän käyttöön liittyviä haavoittuvuuksia. Tämän seurauksena selaintoimittajat ovat ottaneet käyttöön useita sisäänrakennettuja selaimen rajoituksia tiedostojen URL-osoitteiden käytölle.
Linkit tiedostomalliin HTTP:n kautta ladatuissa HTML-dokumenteissa eivät toimi lähes kaikissa suosituissa selaimissa: Internet Explorer (versiosta 6 SP1) [12] [Huom. 3] , Mozilla Firefox [14] [15] , Chromium [16] ja Google Chrome [17] , Safari , Opera . Tällaisten linkkien napsauttaminen ei navigoi eikä näytä virheilmoitusta, vaikka virheilmoitus saattaa olla kirjautunut virhekonsoliin. Tiedoston URL-osoitteen sisältöä ei myöskään ladata HTTP-URL-osoitteella ladatun HTML-dokumentin kehyksiin. Tämä suojauskäytäntö otettiin käyttöön, koska tällaiset linkit aiheuttavat useita haavoittuvuuksia:
Toisen haavoittuvuuden torjumiseksi otettiin käyttöön myös " Domainin rajoitussääntö " ( sama alkuperäkäytäntö ) -niminen käytäntö, joka on samanlainen kuin samanniminen käytäntö, joka otettiin käyttöön aiemmin http-vyöhykkeen sivustoille. Mozilla Firefox, joka esitteli tämän käytännön selaimen versiossa 3 ( Gecko 1.9 -moottori) vuonna 2007, oli yksi ensimmäisistä, jotka tekivät niin (Firefox-kehittäjiltä kesti 3 vuotta keskustella tästä käytännöstä ja ottaa sen käyttöön [19] ). Tämän säännön mukaan tiedosto voi lukea toista tiedostoa vain, jos lähdetiedoston emohakemisto on kohdetiedoston superhakemisto [20] . Microsoft on aiemmin ollut tiukempi ja yleensä poistanut Javascriptin suorittamisen käytöstä avattaessa paikallisia tiedostoja, alkaen Internet Explorer 6 :sta Windows XP SP2:ssa ja lisännyt käyttäjille mahdollisuuden suorittaa komentosarja valitsemalla erityisen komennon ponnahdusvalikosta. Safari 3.2 ei salli käyttäjän avata paikallisten tiedostojen URL-osoitteita mistään muusta lähteestä kuin osoitepalkista. Opera 9.6 ei salli paikallisten html-sivujen ladata etäsisältöä (mutta tämä ei suojaa mahdolliselta hyökkääjän pääsyltä tietokoneen tietoihin). Chromium (ja siitä riippuvainen Google Chrome) otti käyttöön samanlaisen käytännön kuin Opera [21] ja otti myös Firefoxin käytännön huomioon, mutta otti myöhemmin käyttöön vieläkin rajoittavamman käytännön [22] kieltämällä tiedostojen URL-osoitteet komentosarjoilta paikallisilla verkkosivuilla osoitteessa kaikki (myöhemmin päätettiin lieventää tätä käytäntöä).
Näistä rajoituksista on tullut monia valituksia, koska ne häiritsevät paikallisia sivustoja ja verkkohakemistoja, joita käytetään laajasti monissa yritys- ja paikallisverkoissa, CD-jakeluissa, sähköpostin liitteissä ja joita verkkokehittäjät käyttävät myös virheenkorjaukseen. sivustoja. Esimerkiksi Mozillassa otettiin käyttöön useita kymmeniä päällekkäisiä bugeja tästä syystä [15] . Tästä syystä kykyä ohittaa, poistaa käytöstä tai määrittää tämä käytäntö on tuettu selaimissa, ja on ilmestynyt artikkeleita, jotka ehdottavat, miten tämä tehdään. Joten Internet Explorerissa tämä käytäntö määritetään "Oma tietokone" -vyöhykkeen tai muun asetusten "Web-sivustot vähemmän etuoikeutetulla verkkosisältövyöhykkeellä voivat navigoida tälle vyöhykkeelle" -parametrilla. Tämä kielto ohitetaan myös lisäämällä verkkosivustoja, jotka Älä aiheuta huolta Internet Explorerin luotettujen sivustojen vyöhykkeelle . Mozilla Firefoxissa tämä kielto ohitetaan käyttämällä laajennuksia LocalLink, Local Filesystem Links, IE Tab; tai erityinen suojauskäytäntöasetus (erityinen vyöhyke luodaan sivustoryhmälle, jolla on omat suojausasetukset) [14] . Google Chromessa versiosta 7 alkaen tämä rajoitus voidaan ohittaa käynnistämällä selain --allow-file-access-from-files -lipulla tai käyttämällä LocalLinks-laajennusta. Chromium on myös päättänyt lieventää " Domain Restriction Rule " -käytäntöä tiedostojen URL-osoitteisiin [23] lukuisten valitusten seurauksena .
Selainten suojauspolitiikan tärkeimmät rajoitukset näkyvät taulukossa [Huom. 2. 1] .
Testin kuvaus | MSIE6 [Huomautus v.2. 2] | MSIE7 [Huomautus v.2. 3] | MSIE8 [Huomautus v.2. neljä] | FF2 [Huomautus v.2. 5] | FF3 [Huomautus v.2. 6] | Safari [Huomautus v.2. 7] | Opera [Huomautus v.2. kahdeksan] | Chrome [Huomautus v.2. 9] |
---|---|---|---|---|---|---|---|---|
Onko paikallisilla HTML-koodeilla pääsy asiaankuulumattomiin paikallisiin tiedostoihin DOM:n kautta? | Joo | Joo | Joo | Joo | Ei | Ei | Joo | Ei |
Onko paikallisilla HTML-koodeilla pääsy asiaankuulumattomiin paikallisiin tiedostoihin XMLHttpRequestin kautta? | Ei | Ei | Ei | Joo | Ei | Ei | Joo | Ei |
Pääsevätkö paikalliset HTML-koodit Internetin sivustoille XMLHttpRequestin kautta? | Joo | Joo | Joo | Ei | Ei | Ei | Ei | Ei |
Toimiiko document.cookie tiedoston URL-osoitteen kanssa? | Joo | Joo | Joo | Joo | Joo | Joo | Joo | Ei |
Saako <IMG>-tunnisteen ladata tiedostolla URI? | Joo | Joo | Joo | Ei | Ei | Ei | Ei | Ei |
Saako <SCRIPT>-tunnisteen ladata tiedostolla URI? | Joo | Joo | Joo | Ei | Ei | Ei | Ei | Ei |
Saako <IFRAME>-tunnisteen ladata tiedostolla URI? | Joo | Joo | Joo | Ei | Ei | Ei | Ei | Ei |
Saako <EMBED>-tunnisteen ladata tiedoston URI:n kanssa? | Ei | Ei | Ei | Ei | Ei | Ei | Ei | Ei |
Saako <APPLET>-tunnisteen ladata tiedostolla URI? | Joo | Joo | Joo | Ei | Ei | Joo | Ei | Joo |
Onko mahdollista ladata tyylejä (tyylitaulukkoa) tiedoston URI:n kautta? | Joo | Joo | Joo | Ei | Ei | Ei | Ei | Ei |
Ovatko sijainnin uudelleenohjaukset sallittuja URI-tiedoston kautta? | Ei | Ei | Ei | Ei | Ei | Ei | Ei | Ei |
Ovatko Refresh-uudelleenohjaukset sallittuja tiedoston URI:n kautta? | Ei | Ei | Ei | Ei | Ei | Ei | Ei | Ei |
XXE ( Xml eXternal Entity ) -hyökkäys on yksi Internetin tunnetuimmista haavoittuvuuksista. Tämä haavoittuvuuksien luokka on rekisteröity suurimpiin haavoittuvuuksien luetteloihin: Common Weakness Enumeration [26] ja CAPEC [27] . Hyökkäyksen olemus on seuraava. On palveluita, jotka tukevat SOAP- ja XML-RPC-protokollia , jotka hyväksyvät syötteen XML - dokumentin muodossa. XML-dokumenttistandardi tukee DTD -osion sisällyttämistä , ja DTD-osiot puolestaan voivat liittää dokumenttiin lisäkomponentteja, niin sanottuja ulkoisia entiteettejä [ 28 ] . Ulkoiset entiteetit ovat erillisiä tiedostoja, ja ne määritetään SYSTEM-avainsanalla ja URI:lla. Jos XML-jäsennin ei ole vahvistava, se voi yksinkertaisesti ladata ulkoisen entiteetin ja liittää sen XML-asiakirjan sisältöön. Hyökkääjä voi korvata ulkoisen entiteettitiedoston URI:n URI:lla, joka osoittaa tietokoneen laitteistoon tai järjestelmän paikalliseen tiedostoon. Palvelin yrittää lukea määritetyn URI:n tiedoston ja sisällyttää sen sisällön XML-tiedostoon. Tällaista mekanismia käytettäessä seuraavan tyyppiset hyökkäykset ovat mahdollisia [29] :
XXE-haavoittuvuudesta http://xml.org-yhteisössä ( voittoa tavoittelemattoman OWASP -järjestön verkkosivusto ) on keskusteltu vuodesta 2001 [30] , mutta nämä olivat vain teoreettisia ajatuksia tällaisen hyökkäyksen mahdollisuudesta. Ensimmäinen henkilö, joka kiinnitti yleisön huomion tähän haavoittuvuuteen, oli Gregory Steuck [31 ] . Vuonna 2002 hän lähetti tietoturvaohjeen (turvakäsikirjan ) osoitteeseen www.securityfocus.com [29] , jossa hän kuvaili haavoittuvuutta yksityiskohtaisesti ja antoi sille nimen XXE Attack .
XXE-hyökkäys vaikutti moniin tuotteisiin. Kaikista tärkeimmistä ohjelmistohaavoittuvuuksia koskevista tietokannoista löytyy ohjelmistotuotteita, jotka ovat alttiina XXE-hyökkäyksille: kansallinen haavoittuvuustietokanta [32] , yleiset haavoittuvuudet ja altistukset [33] , avoimen lähdekoodin haavoittuvuustietokanta [34] . Haavoittuvuus "XXE-hyökkäyksille" löydettiin sellaisista tunnetuista tuotteista kuin JDK ja JRE (6. versio, 3. päivitys) [33] [35] , WebKit ja siihen perustuva selain Safari (3. versio) [ 36] [37] , Spring Framework [38] , CakePHP [39] , Adobe Reader (versio 7) [40] , Zend Framework [41] , Squiz [42] jne.
URI-tiedostojärjestelmä kuvattiin ensimmäisen kerran kesäkuussa 1994 tiedottavassa RFC 1630 :ssa ("Universal Resource Identifiers in WWW"). Saman vuoden joulukuussa se standardoitiin RFC 1738 :ssa (Uniform Resource Locators (URL)). RFC 1738 kuvaa yleistä URL-muotoa ja on nyt vanhentunut, lukuun ottamatta kahta osiota, jotka kuvaavat tiedosto- ja ftp-malleja. Uusi RFC 3986 (Uniform Resource Identifier (URI): Generic Syntax), julkaistiin vuonna 2005, sisälsi RFC 1738 :n , teki pieniä muutoksia, mutta se ei kuvaillut yksittäisiä skeemoja. Siihen mennessä lähes kaikki pysyvän osan järjestelmät olivat saaneet oman erillisen standardin. Vanha RFC 1738 ilmoitti vain mallin muodon, mutta ei määritellyt sääntöjä tämän mallin soveltamisesta ja paikallisen polun muuntamisesta URI:ksi ja päinvastoin. Oli tarpeen standardoida tiedostoskeema, samoin kuin useita muita standardoimattomia skeemoja.
Vuonna 2004 Paul Hoffman, joka on ollut IETF:n jäsen 1990-luvun alusta lähtien, aloitti tiedostoskeeman standardointiprosessin. Kesäkuun aikana hän kirjoitti erilliset määritykset tiedosto-, ftp-, gopher-, news- ja nntp-, prospero- ja telnet-järjestelmille, ja 17. kesäkuuta 2004 ne julkaistiin ietf.org-verkkosivustolla ja 19. kesäkuuta hän ilmoitti siitä. postituslistalla [43] . Tiedostoskeemastandardin ensimmäinen versio oli nimeltään "File URI Scheme" [44] . Paul Hoffman ilmoitti 19. kesäkuuta, että luonnoksesta on aloitettu aktiivinen keskustelu. IETF-yhteisöltä tuli monia kommentteja, ja pian seurasi toinen versio [45] , jota seurasi kolmas [46] ja neljäs [47] . Mutta yksimielisyyteen ei koskaan päästy. Jatkakseen työskentelyä standardin parissa Mike Brown loi erityisen wikisivuston https://offset.skew.org/wiki/URI/File_scheme , jossa työskenneltiin jonkin aikaa tiedon keräämiseksi tiedostojärjestelmästä. Mutta pian tämä toiminta hiipui, eikä standardia koskaan hyväksytty.
Vuonna 2013 Matthew Kerwin tekee toisen yrityksen standardoida tiedostoskeema. Kesäkuussa 2013 luonnoksen ensimmäinen versio julkaistiin [48] , luonnoksesta aloitettiin keskustelu ja kesä-syyskuun aikana julkaistiin vielä 8 versiota. Viimeisin (nro 8, eli yhdeksäs [Note 4] ) versio luonnoksesta julkaistiin 18. syyskuuta 2013 [49]
URI- järjestelmät | |
---|---|
Virallinen | |
epävirallinen |