Filens URI - schema är ett URI-schema dokumenterat i RFC 8089 , RFC 1630 , RFC 1738 och RFC 3986 , utformat för att adressera filer på en lokal dator eller lokalt nätverk genom deras direkta sökväg på en disk, nätverksmapp eller, i vissa fall, på en ftp-server. URI -schemafilen är registrerad hos IANA URI Scheme Registry [1] och listas under avsnittet "Permanenta URI-scheman".
Filschemat är ett av de äldsta URI- scheman . Det har funnits i mjukvara sedan Internets gryning. WorldWideWeb , den första webbläsaren som skapades 1991 av Tim Berners-Lee , uppfinnaren av World Wide Web , stödde filschemat . Specifikationen RFC 1630 , i vilken den först dokumenterades, skrevs också av Tim Berners-Lee i juni 1994, före skapandet av W3C , och är en av de äldsta Internetspecifikationerna.
Innan introduktionen av ftp - schemat användes filschemat för att referera till filer som finns på ftp-servrar. Tim Berners-Lee föreslog själv användningen av filschemat i URL :en för länkar till filer som är tillgängliga via ftp-protokollet , och han använde själv sådana länkar i avsnittet Referenser i sina publikationer [2] . Lynx- webbläsaren , en av de äldsta bevarade webbläsarna, har behållit denna tolkning av filschemat [3] till denna dag .
Till skillnad från de flesta kända scheman (t.ex. http, nfs, sip, telnet, etc.), är filschemat inte ett protokoll. Detta anges uttryckligen i RFC 1738 : "En egenskap hos detta schema är att det inte specificerar ett internetprotokoll eller filåtkomstmetod, så dess användning i nätverksprotokoll mellan värdar är begränsad" [4] . Filschemat anger helt enkelt sökvägen till en fil som en URL ( eller URI) på en specifik dator. Det står också att "det här schemat, till skillnad från de flesta andra URL-scheman, inte definierar en resurs som är allmänt tillgänglig över Internet."
Filschemat stöds av alla populära webbläsare , på alla operativsystem, även om det är baserat på en mycket gammal standard som beskriver URL-formatet, men som ännu inte har sin egen. Men på grund av ovanstående funktioner är dess användning begränsad. Det fungerar i adressfältet, men det här schemat finns nästan aldrig i HTML -uppmärkningen av webbplatser. Ett nytt schema , app , har utvecklats för att ersätta filen . Appschemat beskrivs i W3C- rekommendationen den 16 maj 2013 [5]
URL:en med schemafilen har formatet [4] :
file:// <värd> / <sökväg>där host är det fullt kvalificerade domännamnet på systemet där sökvägen är tillgänglig och sökvägen är en hierarkisk katalogsökväg i formatet katalog / katalog /.../ filnamn . Om värd utelämnas är standardvärden "localhost", den värd på vilken webbadressen tolkas. Före 2005 hade standarden ett krav så att om värden utelämnas så kan motsvarande snedstreck eller dubbla snedstreck inte utelämnas ("file:///foo.txt" kommer att fungera, men "file://foo.txt" kommer inte , även om vissa analyserare kunde hantera det här fallet). RFC 3986 , som släpptes 2005, tog bort detta krav. Enligt RFC 3986 utelämnar en utelämnande auktoritet (i detta fall motsvarande värd ) även det dubbla snedstrecket (//).
Det framåtgående snedstrecket (/) har en annan betydelse beroende på positionen i URI:n.
Komponenterna inloggning (användarnamn), lösenord (lösenord) och port (port) används inte i URL:er med filschemat. Men samtidigt kan parametrarna (frågesträng) och ankare (fragmentidentifierare) komponenter [6] användas av själva applikationen, som visar innehållet i den givna filens URL. Till exempel kan ett skript inuti ett HTML- dokument läsa parametrarna, och ett ankare kan användas på ett standardsätt för att navigera i dokumentet.
Fil-URL:er skiljer sig i teckenuppsättning från både traditionella URL:er och filsökvägar i filsystem. Eftersom sökvägar i filsystem kan innehålla tecken som är reserverade i URL:er för tjänsteändamål ('#', '%', etc.), kodas sådana tecken (tidigare även mellanslag ' ') när en sökväg konverteras till en fil-URL . Men samtidigt, till skillnad från URL:en, i filen URL rekommenderas det att använda tecken från främmande alfabet (det vill säga inte från US-ASCII-tabellen) som den är, det vill säga utan URL-kodning [6] . Detta beror på att de URL-kodade oktetterna i filens URL behandlas som byte i användarens aktuella teckentabell, vilket innebär att värdet på URL:en kommer att ändras beroende på lokaliteten där dokumentet visas [6] .
4 Unix - exempel som pekar på samma / etc / fstab-fil :
file://localhost/etc/fstab file:///etc/fstab file:///etc/./fstab file:///etc/../etc/fstabEtt exempel på en länk till filen rfc959.txt, som finns på nnsc.nsf.net ftp-servern [Anm. 1] :
file://nnsc.nsf.net/rfc/rfc959.txt Mac OS2 exempel på Mac OS som pekar på samma /var/log/system.log-fil :
file://localhost/var/log/system.log file:///var/log/system.log WindowsExempel på sökvägar som stöds av Windows -program som pekar på filen 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.aviEn exempelsökväg till start.swf -filen som finns i nätverksmappen produkter på en dator med nätverksnamnet applib [7] :
file://applib/products/ab/abc_9/4148.920a/media/start.swfEn exempelfil URI med %-kodade tecken och ett Unicode-tecken [7] (i Internet Explorer 6 och 7 kanske %20 -exemplet inte fungerar [8] ):
file:///C:/Documents%20and%20Settings/davris/FileSchemeURIs.doc file:///C:/exampleㄓ.txtWebbläsare | Stöd för filschema (localhost) | Tom värd ( file:/// ) | Nätverksvärd _ | Körbokstav i sökväg ( C: ) [Ex. v. 1] | Mappöversikt | URL-kodade tecken | fillänkar i html |
---|---|---|---|---|---|---|---|
Google Chrome | Ja | Ja | VINNER | Ja | Ja | Ja | Ja |
Internet Explorer | Ja | Ja | VINNER | Ja | Inte | Ja | Ja |
Konqueror | Ja | Ja | ? | - | Ja | Ja | Ja |
Lodjur | Ja | Ja | FTP | Ja | Ja | Ja | Ja |
Mozilla Firefox | Ja | Ja | VINNER [Ex. v. 2] | Ja | Ja | Ja | Ja |
Opera | Ja | Ja | VINNER | Ja | Ja | Ja | Ja |
safari | Ja | ? | ? | - | Inte | ? | ? |
Yandex webbläsare | Ja | Ja | VINNER | Ja | Ja | Ja | Ja |
Fil-URI-schemat stöddes ursprungligen av Windows, dvs. med tillkomsten av URI-stöd [Anm. 2] i allmänhet, och specifikt med lanseringen av Internet Explorer 1 [10] . Den första versionen av Internet Explorer utvecklades 1995, när URL-standarden ännu inte existerade, och filschemat kunde tolkas på olika sätt, vilket hände med webbläsaren. Dess olika moduler hanterade filschemat på olika sätt. Efter omarbetning eliminerades denna situation. shlwapi.dll skapades , där all kod för att arbeta med URL:en placerades. Under omarbetningen kom man överens om två former av filschemat: en enligt URL-standarden, den andra en gammal form som kom från DOS-tiden. Microsofts anställda kallade det äldre fil-URL (föråldrad fil-URL). Exempel på äldre fil-URL:
Filsökväg: c:\windows\Mina dokument 100%20\foo.txt Äldre fil-URL: file://c:\windows\My Documents 100%20\foo.txt Standardfilens URL: file:///c:/windows/My%20Documents%20100%2520/foo.txt Filsökväg: \\server\share\My Documents 100%20\foo.txt Äldre fil-URL: file://\\server\share\My Documents 100%20\foo.txt Standardfil-URL: file://server/share/My%20Documents%20100%2520/foo.txtDen nya dll-filen hanterar både nya och gamla fil-URL:er korrekt, så dess PathCreateFromUrl()- och UrlCreateFromPath()-funktioner rekommenderas för konvertering mellan Windows-sökvägar och fil-URL:er [6] [11] .
Utöver dessa funktioner skapades funktionen CreateURLMoniker() i urlmon.dll (som börjar med Internet Explorer 3 ) för att konvertera en sträng-URI till ett objekt som kan användas för att få informationen adresserad till den givna URI-en ( moniker ). Men den här funktionen orsakade också vissa problem med att konvertera filen URI [11] , som ett resultat av vilket en ny CreateURLMonikerEx()-funktion lades till och rekommenderades för användning (från och med Internet Explorer 5.5 ), där alla dessa problem fixades. Med lanseringen av Internet Explorer 7 lades ytterligare en CreateURLMonikerEx2()-funktion till som stöder relativa sökvägar.
Med tillkomsten och spridningen av webbläsarstöd för skriptspråk som JavaScript har ett antal sårbarheter upptäckts relaterade till användningen av filschemat. Som ett resultat av detta har webbläsarleverantörer infört ett antal inbyggda webbläsarrestriktioner för användningen av fil-URL:er.
Länkar med filschemat i HTML-dokument som laddas över HTTP fungerar inte i nästan alla populära webbläsare: Internet Explorer (från version 6 SP1) [12] [Obs. 3] , Mozilla Firefox [14] [15] , Chromium [16] och Google Chrome [17] , Safari , Opera . Att klicka på sådana länkar varken navigerar eller visar ett felmeddelande, även om ett felmeddelande kan loggas i felkonsolen. Innehåll på en fil-URL läses inte heller in i ramarna för ett HTML-dokument som laddas med en HTTP-URL. Denna säkerhetspolicy infördes på grund av att sådana länkar orsakar ett antal sårbarheter:
För att bekämpa den andra sårbarheten infördes också en policy som kallas " Domänbegränsningsregel " ( samma ursprungspolicy ), liknande policyn med samma namn som introducerades tidigare för webbplatser i http-zonen. Mozilla Firefox, som introducerade denna policy i webbläsarversion 3 ( Gecko 1.9-motor) 2007, var en av de första som gjorde det (det tog 3 år för Firefox-utvecklarna att diskutera och implementera denna policy [19] ). Enligt denna regel kan en fil endast läsa en annan fil om källfilens överordnade katalog är målfilens superkatalog [20] . Microsoft har tidigare varit tuffare och allmänt inaktiverat Javascript-körning när de öppnar lokala filer, med början i Internet Explorer 6 i Windows XP SP2, vilket har lagt till möjligheten för användare att köra ett skript genom att välja ett speciellt kommando från en popup-meny. Safari 3.2 tillåter inte användaren att öppna lokala fil-URL från någon annan källa än adressfältet. Opera 9.6 tillåter inte lokala HTML-sidor att ladda fjärrinnehåll (men detta skyddar inte mot möjligheten för en angripare att komma åt data på datorn). Chromium (och dess beroende Google Chrome) implementerade en policy som liknar den för Opera [21] och tog även hänsyn till Firefoxs policy, men implementerade senare en ännu mer restriktiv policy [22] genom att inte tillåta filadresser för skript på lokala webbsidor på alla (senare beslutades att mildra denna policy).
Det har förekommit många klagomål till följd av dessa begränsningar, eftersom de stör lokala webbplatser och webbkataloger, som används i stor utsträckning i många företags- och lokala nätverk, i CD-distributioner, i e-postbilagor och även används av webbutvecklare för felsökning. . webbplatser. Till exempel introducerades flera dussintals dubbletter av buggar i Mozilla om detta [15] . Därför har möjligheten att kringgå, inaktivera eller konfigurera denna policy stöds i webbläsare, och artiklar har dykt upp som föreslår hur man gör detta. Så i Internet Explorer konfigureras den här policyn av parametern "Webbplatser i mindre privilegierad webbinnehållszon kan navigera in i den här zonen" i inställningarna för zonen "Min dator" eller en annan. Dessutom förbigås detta förbud genom att lägga till webbplatser som orsaka inte någon oro för zonen Internet Explorer Trusted Sites . I Mozilla Firefox förbigås detta förbud med tilläggen LocalLink, Local Filesystem Links, IE Tab; eller en speciell säkerhetspolicyinställning (en speciell zon skapas för en grupp webbplatser med sina egna specifika säkerhetsinställningar) [14] . I Google Chrome från och med version 7 kan denna begränsning kringgås genom att starta webbläsaren med flaggan --allow-file-access-from-files eller genom att använda tillägget LocalLinks. Chromium har också beslutat att mildra policyn för " Domänbegränsningsregeln " för fil-URL:er [23] som ett resultat av många klagomål .
De huvudsakliga begränsningarna för säkerhetspolicyn i webbläsare återspeglas i tabellen [Anmärkning 2. 1] .
Testbeskrivning | MSIE6 [Anmärkning v.2. 2] | MSIE7 [Anmärkning v.2. 3] | MSIE8 [Anmärkning v.2. fyra] | FF2 [Notera v.2. 5] | FF3 [Notera v.2. 6] | Safari [Anmärkning v.2. 7] | Opera [Anmärkning v.2. åtta] | Chrome [Anmärkning v.2. 9] |
---|---|---|---|---|---|---|---|---|
Har lokala HTML-filer tillgång till orelaterade lokala filer via DOM? | Ja | Ja | Ja | Ja | Inte | Inte | Ja | Inte |
Har lokala HTML-filer tillgång till orelaterade lokala filer via XMLHttpRequest? | Inte | Inte | Inte | Ja | Inte | Inte | Ja | Inte |
Har lokala HTML-filer tillgång till webbplatser på Internet via XMLHttpRequest? | Ja | Ja | Ja | Inte | Inte | Inte | Inte | Inte |
Fungerar document.cookie med fil-URL? | Ja | Ja | Ja | Ja | Ja | Ja | Ja | Inte |
Är det tillåtet att ladda <IMG>-taggen med filen URI? | Ja | Ja | Ja | Inte | Inte | Inte | Inte | Inte |
Är det tillåtet att ladda <SCRIPT>-taggen med filen URI? | Ja | Ja | Ja | Inte | Inte | Inte | Inte | Inte |
Är det tillåtet att ladda <IFRAME>-taggen med filen URI? | Ja | Ja | Ja | Inte | Inte | Inte | Inte | Inte |
Är det tillåtet att ladda <EMBED>-taggen med en fil-URI? | Inte | Inte | Inte | Inte | Inte | Inte | Inte | Inte |
Är det tillåtet att ladda <APPLET>-taggen med filen URI? | Ja | Ja | Ja | Inte | Inte | Ja | Inte | Ja |
Är det möjligt att ladda stilar (stilmall) via filen URI? | Ja | Ja | Ja | Inte | Inte | Inte | Inte | Inte |
Är platsomdirigering tillåtna via fil-URI? | Inte | Inte | Inte | Inte | Inte | Inte | Inte | Inte |
Är Refresh omdirigeringar tillåtna via fil-URI? | Inte | Inte | Inte | Inte | Inte | Inte | Inte | Inte |
XXE ( Xml eXternal Entity ) attacken är en av de mest kända sårbarheterna på Internet. Denna klass av sårbarheter är registrerad i de största sårbarhetskatalogerna: Common Weakness Enumeration [26] och CAPEC [27] . Kärnan i attacken är följande. Det finns tjänster som stöder SOAP- och XML-RPC-protokollen som accepterar input i form av ett XML - dokument. XML-dokumentstandarden stöder införandet av en DTD- sektion , och DTD-sektionerna kan i sin tur koppla ytterligare komponenter till dokumentet, de så kallade externa enheterna [ 28 ] . Externa enheter är separata filer och specificeras med nyckelordet SYSTEM och URI. Om XML-tolken inte är validerande kan den helt enkelt ladda den externa enheten och bifoga den till innehållet i XML-dokumentet. En angripare kan i den externa enhetsfilens URI ersätta en URI som pekar på en hårdvaruenhet på datorn eller till en lokal fil i systemet. Servern kommer att försöka läsa filen på angiven URI och inkludera dess innehåll i XML. När du använder en sådan mekanism är följande typer av attacker möjliga [29] :
XXE-sårbarheten i http: //xml.org-communityt (webbplatsen för den ideella organisationen OWASP ) har diskuterats sedan 2001 [30] , men det var bara teoretiska tankar om möjligheten till en attack av detta slag. Den första personen som drog allmänhetens uppmärksamhet till denna sårbarhet var Gregory Steuck [31 ] . 2002 skickade han en säkerhetsrådgivning (säkerhetsmanual ) till www.securityfocus.com [29] , där han beskrev sårbarheten i detalj och gav den namnet XXE Attack .
Många produkter påverkades av XXE-attacken. Alla större databaser med sårbarheter i programvara kan hitta mjukvaruprodukter som är sårbara för XXE-attacker: National Vulnerability Database [32] , Common Vulnerabilities and Exposures [33] , Open Source Vulnerability Database [34] . Sårbarhet för "XXE-attacker" upptäcktes i så välkända produkter som JDK och JRE (6:e versionen, 3:e uppdateringen) [33] [35] , WebKit och webbläsaren baserad på det Safari (3:e versionen) [ 36] [37] , Spring Framework [38] , CakePHP [39] , Adobe Reader (version 7) [40] , Zend Framework [41] , Squiz [42] osv.
URI-filschemat beskrevs först i juni 1994 i den informativa RFC 1630 ("Universal Resource Identifiers in WWW"). I december samma år standardiserades den i RFC 1738 (Uniform Resource Locators (URL)). RFC 1738 beskriver det allmänna URL-formatet och är nu föråldrat, förutom två avsnitt som beskriver fil- och ftp-scheman. Den nya RFC 3986 (Uniform Resource Identifier (URI): Generic Syntax), som släpptes 2005, inkorporerade RFC 1738 , gjorde mindre ändringar, men den beskrev inte individuella scheman. Vid den tiden hade nästan alla system från den permanenta sektionen fått sin egen separata standard. Den gamla RFC 1738 angav bara formatet för schemat, men definierade inte reglerna för att tillämpa detta schema och konvertera en lokal sökväg till en URI och vice versa. Det fanns ett behov av att standardisera filschemat, liksom ett antal andra icke-standardiserade scheman.
2004 började Paul Hoffman, som har varit medlem i IETF sedan början av 1990-talet, processen att standardisera filschemat. Under juni skrev han separata specifikationer för filen, ftp, gopher, news och nntp, prospero och telnet-scheman, och den 17 juni 2004 publicerades de på ietf.org-webbplatsen och den 19 juni tillkännagav han det på sändlistan [43] . Den första revisionen av filschemastandarden kallades "The file URI Scheme" [44] . Den 19 juni meddelade Paul Hoffman att utkastet hade påbörjats en aktiv diskussion. Det fanns många kommentarer från IETF-gemenskapen, och den andra revisionen [45] följt av den tredje [46] och den fjärde [47] följde snart . Men någon konsensus nåddes aldrig. För att fortsätta arbeta med standarden skapade Mike Brown en speciell wikisajt https://offset.skew.org/wiki/URI/File_scheme , där man arbetade under en tid för att samla in information om filschemat . Men snart tog denna verksamhet slut, och standarden antogs aldrig.
2013 gör Matthew Kerwin ytterligare ett försök att standardisera filschemat. I juni 2013 publicerades den första revideringen av utkastet [48] , en diskussion om utkastet inleddes och under juni-8 september publicerades ytterligare revisioner. Den senaste (#8, d.v.s. nionde [not 4] ) revisionen av utkastet publicerades den 18 september 2013 [49]
URI- scheman | |
---|---|
Officiell | |
inofficiell |