Fil- URI -skemaet er et URI-skema, der er dokumenteret i RFC 8089 , RFC 1630 , RFC 1738 og RFC 3986 , designet til at adressere filer på en lokal computer eller lokalt netværk ved deres direkte sti på en disk, netværksmappe eller, i nogle tilfælde, på en ftp-server. URI -skemafilen er registreret hos IANA URI Scheme Registry [1] og er opført under afsnittet "Permanente URI-skemaer".
Filskemaet er et af de ældste URI - skemaer . Det har været inkorporeret i software siden internettets begyndelse. WorldWideWeb , den første webbrowser skabt i 1991 af Tim Berners-Lee , opfinder af World Wide Web , understøttede filskemaet . Specifikationen RFC 1630 , som den først blev dokumenteret i, blev også skrevet af Tim Berners-Lee i juni 1994, før oprettelsen af W3C , og er en af de ældste internetspecifikationer.
Før introduktionen af ftp - skemaet blev filskemaet brugt til at henvise til filer, der var placeret på ftp-servere. Tim Berners-Lee foreslog selv brugen af filskemaet i URL'en til links til filer, der er tilgængelige via ftp-protokollen , og han brugte selv sådanne links i References-sektionen i hans publikationer [2] . Lynx - browseren , en af de ældste overlevende browsere, har bevaret denne fortolkning af fil [3] -skemaet til denne dag .
I modsætning til de fleste kendte skemaer (f.eks. http, nfs, sip, telnet osv.), er filskemaet ikke en protokol. Dette er udtrykkeligt angivet i RFC 1738 : "Et træk ved dette skema er, at det ikke specificerer en internetprotokol eller filadgangsmetode, så dets brug i netværksprotokoller mellem værter er begrænset" [4] . Filskemaet angiver blot stien til en fil som en URL ( eller URI) på en bestemt maskine. Den siger også, at "denne ordning, i modsætning til de fleste andre URL-skemaer, ikke definerer en ressource, der er offentligt tilgængelig over internettet."
Filskemaet understøttes af alle populære browsere, på alle operativsystemer, selvom det er baseret på en meget gammel standard, der beskriver URL-formatet, men endnu ikke har sit eget . Men på grund af ovenstående funktioner er brugen begrænset. Det fungerer i adresselinjen, men denne ordning findes næsten aldrig i HTML -markeringen af websteder. Et nyt skema , app , er blevet udviklet til at erstatte filen . Appskemaet er beskrevet i W3C - anbefalingen den 16. maj 2013 [5]
URL'en med skemafilen har formatet [4] :
file:// <host> / <sti>hvor host er det fuldt kvalificerede domænenavn på systemet, hvor stien er tilgængelig , og stien er en hierarkisk mappesti i formatet mappe / bibliotek /.../ filnavn . Hvis værten udelades, er standarden "localhost", den vært, hvor URL'en er parset. Før 2005 havde standarden et krav om, at hvis værten udelades, så kan den tilsvarende skråstreg eller dobbelte skråstreg ikke udelades ("file:///foo.txt" vil fungere, men "fil://foo.txt" vil ikke, selvom nogle parsere var i stand til at håndtere denne sag). RFC 3986 , udgivet i 2005, fjernede dette krav. Ifølge RFC 3986 udelader udeladelse af autoritet (i dette tilfælde svarende til host ) også den dobbelte skråstreg (//).
Skråstreg (/) har en anden betydning afhængigt af positionen i URI'en.
Komponenterne login (brugernavn), adgangskode (adgangskode) og port (port) bruges ikke i URL'er med filskemaet. Men på samme tid kan parametrene (forespørgselsstreng) og anker (fragmentidentifikator) komponenter [6] bruges af selve applikationen, der viser indholdet af den givne fil-URL. For eksempel kan et script inde i et HTML - dokument læse parametrene, og et anker kan bruges på en standard måde til at navigere i dokumentet.
Fil-URL'er adskiller sig i tegnsæt fra både traditionelle URL'er og filstier i filsystemer. Da stier i filsystemer kan indeholde tegn, der er reserveret i URL'er til serviceformål ('#', '%' osv.), bliver sådanne tegn (tidligere også mellemrum ' ') kodet, når en sti konverteres til en fil-URL . Men på samme tid, i modsætning til URL'en, anbefales det i filens URL at bruge tegn af fremmede alfabeter (det vil sige ikke fra US-ASCII-tabellen) som den er, det vil sige uden URL-kodning [6] . Dette skyldes, at de URL-kodede oktetter i filens URL behandles som bytes i brugerens aktuelle tegntabel, hvilket betyder, at værdien af URL'en vil ændre sig afhængigt af den lokalitet, hvor dokumentet ses [6] .
4 Unix eksempler , der peger på den samme / etc / fstab fil :
file://localhost/etc/fstab file:///etc/fstab file:///etc/./fstab file:///etc/../etc/fstabEt eksempel på et link til filen rfc959.txt, som er placeret på nnsc.nsf.net ftp-serveren [Bemærk. 1] :
file://nnsc.nsf.net/rfc/rfc959.txt Mac OS2 eksempler på Mac OS , der peger på den samme /var/log/system.log-fil :
file://localhost/var/log/system.log file:///var/log/system.log WindowsEksempler på stier, der understøttes af Windows -programmer, der peger 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.aviEt eksempel på en sti til start.swf -filen placeret i netværksmappeprodukterne på en computer med netværksnavnet applib [ 7] :
file://applib/products/ab/abc_9/4148.920a/media/start.swfEt eksempel på en fil-URI med %-kodede tegn og et Unicode-tegn [7] (i Internet Explorer 6 og 7 virker %20 -eksemplet muligvis ikke [8] ):
file:///C:/Documents%20and%20Settings/davris/FileSchemeURIs.doc file:///C:/exampleㄓ.txtBrowser | Understøttelse af filskema (localhost) | Tom vært ( fil:/// ) | Netværksvært _ | Drevbogstav i sti ( C: ) [Eks. v. 1] | Mappeoversigt | URL-kodede tegn | fillinks i html |
---|---|---|---|---|---|---|---|
Google Chrome | Ja | Ja | VINDER | Ja | Ja | Ja | Ja |
Internet Explorer | Ja | Ja | VINDER | Ja | Ikke | Ja | Ja |
Konqueror | Ja | Ja | ? | - | Ja | Ja | Ja |
Los | Ja | Ja | FTP | Ja | Ja | Ja | Ja |
Mozilla Firefox | Ja | Ja | VINDER [Eks. v. 2] | Ja | Ja | Ja | Ja |
Opera | Ja | Ja | VINDER | Ja | Ja | Ja | Ja |
safari | Ja | ? | ? | - | Ikke | ? | ? |
Yandex browser | Ja | Ja | VINDER | Ja | Ja | Ja | Ja |
Fil-URI-skemaet blev oprindeligt understøttet af Windows, dvs. med fremkomsten af URI-understøttelse [Note. 2] generelt, og specifikt med udgivelsen af Internet Explorer 1 [10] . Den første version af Internet Explorer blev udviklet i 1995, da URL-standarden endnu ikke eksisterede, og filskemaet kunne fortolkes på forskellige måder, hvilket skete med browseren. Dens forskellige moduler håndterede filskemaet forskelligt. Efter omarbejdning blev denne situation elimineret. shlwapi.dll blev oprettet , hvori al koden til at arbejde med URL'en blev placeret. Under omarbejdelsen blev to former for filskemaet aftalt: den ene i henhold til URL-standarden, den anden en gammel formular, der stammede fra DOS-tiden. Microsoft-medarbejdere kaldte det legacy file URL (forældet fil URL). Eksempler på ældre fil-URL:
Filsti: c:\windows\My Documents 100%20\foo.txt Ældre fil-URL: file://c:\windows\My Documents 100%20\foo.txt Standardfil-URL: file:///c:/windows/My%20Documents%20100%2520/foo.txt Filsti: \\server\share\Mine dokumenter 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 nye dll håndterer både nye og gamle fil-URL'er korrekt, så dens PathCreateFromUrl()- og UrlCreateFromPath()-funktioner anbefales til konvertering mellem Windows-stier og fil-URL'er [6] [11] .
Ud over disse funktioner blev funktionen CreateURLMoniker() oprettet i urlmon.dll (startende med Internet Explorer 3 ) for at konvertere en streng URI til et objekt, der kan bruges til at få dataene adresseret til den givne URI ( moniker ). Men denne funktion forårsagede også nogle problemer med at konvertere filen URI [11] , som et resultat af hvilket en ny CreateURLMonikerEx() funktion blev tilføjet og anbefalet til brug (startende med Internet Explorer 5.5 ), hvor alle disse problemer blev rettet. Med udgivelsen af Internet Explorer 7 blev endnu en CreateURLMonikerEx2()-funktion tilføjet, der understøtter relative stier.
Med fremkomsten og udbredelsen af browserunderstøttelse til scriptsprog som JavaScript er der blevet opdaget en række sårbarheder relateret til brugen af filskemaet. Som følge heraf har browserleverandører indført en række indbyggede browserbegrænsninger for brugen af fil-URL'er.
Links med filskemaet i HTML-dokumenter indlæst over HTTP virker ikke i næsten alle populære browsere: Internet Explorer (fra version 6 SP1) [12] [Bemærk. 3] , Mozilla Firefox [14] [15] , Chromium [16] og Google Chrome [17] , Safari , Opera . Et klik på sådanne links hverken navigerer eller viser en fejlmeddelelse, selvom en fejlmeddelelse kan være logget i fejlkonsollen. Indhold på en fil-URL indlæses heller ikke i rammerne af et HTML-dokument, der er indlæst på en HTTP-URL. Denne sikkerhedspolitik blev introduceret på grund af det faktum, at sådanne links forårsager en række sårbarheder:
For at bekæmpe den anden sårbarhed blev der også indført en politik kaldet " Domænebegrænsningsregel " ( samme oprindelsespolitik ), svarende til politikken af samme navn, der blev indført tidligere for websteder i http-zonen. Mozilla Firefox, som introducerede denne politik i browserversion 3 ( Gecko 1.9-motor) i 2007, var en af de første til at gøre det (det tog 3 år for Firefox-udviklerne at diskutere og implementere denne politik [19] ). Ifølge denne regel kan en fil kun læse en anden fil, hvis kildefilens overordnede bibliotek er målfilens supermappe [20] . Microsoft har tidligere været hårdere og generelt deaktiveret Javascript-udførelse ved åbning af lokale filer, startende med Internet Explorer 6 i Windows XP SP2, hvilket tilføjer muligheden for, at brugere kan udføre et script ved at vælge en speciel kommando fra en pop-up-menu. Safari 3.2 tillader ikke brugeren at åbne lokale fil-URL'er fra andre kilder end adresselinjen. Opera 9.6 tillader ikke lokale html-sider at indlæse fjernindhold (men dette beskytter ikke mod muligheden for, at en hacker får adgang til data på computeren). Chromium (og dets afhængige Google Chrome) implementerede en politik svarende til Operas [21] og tog også Firefox's politik i betragtning, men implementerede senere en endnu mere restriktiv politik [22] ved at forbyde fil-URL'er for scripts på lokale websider på alle (senere blev det besluttet at lempe denne politik).
Der har været mange klager som følge af disse begrænsninger, da de forstyrrer lokale websteder og web-mapper, som er meget brugt i mange virksomheds- og lokale netværk, i cd-distributioner, i vedhæftede filer i e-mail og også bruges af webudviklere til fejlretning . websteder. For eksempel blev flere snesevis af duplikerede fejl introduceret i Mozilla om dette [15] . Derfor er muligheden for at omgå, deaktivere eller konfigurere denne politik blevet understøttet i browsere, og der er dukket artikler op, der foreslår, hvordan man gør dette. Så i Internet Explorer er denne politik konfigureret af parameteren "Websteder i mindre privilegeret webindholdszone kan navigere ind i denne zone" i indstillingerne for zonen "Min computer" eller en anden. Dette forbud omgås også ved at tilføje websteder, der ikke forårsage nogen bekymring for zonen Internet Explorer Trusted Sites . I Mozilla Firefox omgås dette forbud ved at bruge udvidelserne LocalLink, Local Filesystem Links, IE Tab; eller en særlig sikkerhedspolitikindstilling (en særlig zone oprettes for en gruppe af websteder med sine egne specifikke sikkerhedsindstillinger) [14] . I Google Chrome fra version 7 kan denne begrænsning omgås ved at starte browseren med flaget --allow-file-access-from-files eller ved at bruge udvidelsen LocalLinks. Chromium har også besluttet at lempe " domænebegrænsningsreglen "-politikken for fil-URL'er [23] som følge af adskillige klager .
De vigtigste begrænsninger af sikkerhedspolitikken i browsere er afspejlet i tabellen [Note 2. 1] .
Testbeskrivelse | MSIE6 [Bemærk v.2. 2] | MSIE7 [Bemærk v.2. 3] | MSIE8 [Bemærk v.2. fire] | FF2 [Bemærk v.2. 5] | FF3 [Bemærk v.2. 6] | Safari [Bemærk v.2. 7] | Opera [Bemærk v.2. otte] | Chrome [Bemærk v.2. 9] |
---|---|---|---|---|---|---|---|---|
Har lokale HTML'er adgang til ikke-relaterede lokale filer via DOM? | Ja | Ja | Ja | Ja | Ikke | Ikke | Ja | Ikke |
Har lokale HTML'er adgang til ikke-relaterede lokale filer via XMLHttpRequest? | Ikke | Ikke | Ikke | Ja | Ikke | Ikke | Ja | Ikke |
Har lokale HTML'er adgang til websteder på internettet via XMLHttpRequest? | Ja | Ja | Ja | Ikke | Ikke | Ikke | Ikke | Ikke |
Virker document.cookie med fil-URL? | Ja | Ja | Ja | Ja | Ja | Ja | Ja | Ikke |
Er det tilladt at indlæse <IMG> tag med filen URI? | Ja | Ja | Ja | Ikke | Ikke | Ikke | Ikke | Ikke |
Er det tilladt at indlæse <SCRIPT> tag med filen URI? | Ja | Ja | Ja | Ikke | Ikke | Ikke | Ikke | Ikke |
Er det tilladt at indlæse <IFRAME> tag med filen URI? | Ja | Ja | Ja | Ikke | Ikke | Ikke | Ikke | Ikke |
Er det tilladt at indlæse <EMBED>-tagget med en fil-URI? | Ikke | Ikke | Ikke | Ikke | Ikke | Ikke | Ikke | Ikke |
Er det tilladt at indlæse <APPLET> tag med filen URI? | Ja | Ja | Ja | Ikke | Ikke | Ja | Ikke | Ja |
Er det muligt at indlæse stilarter (stylesheet) via fil-URI? | Ja | Ja | Ja | Ikke | Ikke | Ikke | Ikke | Ikke |
Er placeringsomdirigering tilladt via fil-URI? | Ikke | Ikke | Ikke | Ikke | Ikke | Ikke | Ikke | Ikke |
Er Refresh-omdirigering tilladt via fil-URI? | Ikke | Ikke | Ikke | Ikke | Ikke | Ikke | Ikke | Ikke |
XXE ( Xml eXternal Entity ) angrebet er en af de mest berømte sårbarheder på internettet. Denne klasse af sårbarheder er registreret i de største sårbarhedskataloger: Common Weakness Enumeration [26] og CAPEC [27] . Essensen af angrebet er som følger. Der er tjenester, der understøtter SOAP- og XML-RPC-protokollerne , der accepterer input i form af et XML - dokument. XML-dokumentstandarden understøtter medtagelsen af en DTD- sektion , og DTD-sektionerne kan til gengæld forbinde yderligere komponenter til dokumentet, de såkaldte eksterne enheder [ 28 ] . Eksterne enheder er separate filer og specificeres ved hjælp af SYSTEM nøgleordet og URI. Hvis XML-parseren ikke er validerende, kan den blot indlæse den eksterne enhed og vedhæfte den til indholdet af XML-dokumentet. En angriber kan i den eksterne enhedsfils URI erstatte en URI, der peger på en hardwareenhed på computeren eller til en lokal fil i systemet. Serveren vil forsøge at læse filen på den angivne URI og inkludere dens indhold i XML. Når du bruger en sådan mekanisme, er følgende typer angreb mulige [29] :
XXE-sårbarheden i http://xml.org-fællesskabet ( hjemmesiden for non-profit-organisationen OWASP ) har været diskuteret siden 2001 [30] , men disse var kun teoretiske tanker om muligheden for et angreb af denne art. Den første person til at henlede offentlighedens opmærksomhed på denne sårbarhed var Gregory Steuck [31 ] . I 2002 sendte han en sikkerhedsrådgivning (sikkerhedsmanual ) til www.securityfocus.com [29] , hvori han beskrev sårbarheden i detaljer og gav den navnet XXE Attack .
Mange produkter blev påvirket af XXE-angrebet. Alle større databaser over softwaresårbarheder kan finde softwareprodukter, der er sårbare over for XXE-angreb: National Vulnerability Database [32] , Common Vulnerabilities and Exposures [33] , Open Source Vulnerability Database [34] . Sårbarhed over for "XXE-angreb" blev opdaget i så velkendte produkter som JDK og JRE (6. version, 3. opdatering) [33] [35] , WebKit og browseren baseret på det Safari (3. version) [ 36] [37] , Spring Framework [38] , CakePHP [39] , Adobe Reader (Version 7) [40] , Zend Framework [41] , Squiz [42] osv.
URI-filskemaet blev først beskrevet i juni 1994 i den informative RFC 1630 ("Universal Resource Identifiers in WWW"). I december samme år blev det standardiseret i RFC 1738 (Uniform Resource Locators (URL)). RFC 1738 beskriver det generelle URL-format og er nu forældet, bortset fra to sektioner, der beskriver fil- og ftp-skemaerne. Den nye RFC 3986 (Uniform Resource Identifier (URI): Generic Syntax), udgivet i 2005, inkorporerede RFC 1738 , lavede mindre ændringer, men den beskrev ikke individuelle skemaer. På det tidspunkt havde næsten alle ordninger fra den faste afdeling fået deres egen separate standard. Den gamle RFC 1738 angav kun formatet af ordningen, men definerede ikke reglerne for at anvende denne ordning og konvertere en lokal sti til en URI og omvendt. Der var behov for at standardisere filskemaet, samt en række andre ikke-standardiserede skemaer.
I 2004 begyndte Paul Hoffman, som har været medlem af IETF siden begyndelsen af 1990'erne, processen med at standardisere filskemaet. I løbet af juni skrev han separate specifikationer for fil-, ftp-, gopher-, nyheds- og nntp-, prospero- og telnet-skemaerne, og den 17. juni 2004 blev de offentliggjort på ietf.org-webstedet, og den 19. juni annoncerede han det på mailinglisten [43] . Den første revision af filskemastandarden blev kaldt "The file URI Scheme" [44] . Den 19. juni meddelte Paul Hoffman, at udkastet var begyndt aktiv diskussion. Der var mange kommentarer fra IETF-fællesskabet, og den anden revision [45] efterfulgt af den tredje [46] og den fjerde [47] fulgte snart . Men der blev aldrig opnået enighed. For at fortsætte med at arbejde på standarden oprettede Mike Brown et særligt wiki - site https://offset.skew.org/wiki/URI/File_scheme , hvor der i nogen tid blev arbejdet med at indsamle information vedrørende filskemaet. Men snart døde denne aktivitet, og standarden blev aldrig vedtaget.
I 2013 gør Matthew Kerwin endnu et forsøg på at standardisere filskemaet. I juni 2013 blev den første revision af udkastet offentliggjort [48] , en diskussion af udkastet begyndte, og i løbet af juni-8. september blev flere revisioner offentliggjort. Den seneste (#8, dvs. niende [Note 4] ) revision af udkastet blev offentliggjort den 18. september 2013 [49]
URI- ordninger | |
---|---|
Officiel | |
uofficiel |