Proxy automatisk konfiguration

En proxy auto-config- fil ( PAC ) definierar hur webbläsare och andra användaragenter automatiskt kan välja lämplig proxyserver (åtkomstmetod) för att hämta en given URL .

En PAC-fil innehåller en JavaScript -funktion FindProxyForURL(url, host) . Denna funktion returnerar en sträng med en eller flera åtkomstmetodspecifikationer. Dessa specifikationer gör att användaragenten använder en viss proxyserver eller ansluter direkt.

Flera specifikationer ger ett fall-back när en proxy inte svarar. Webbläsaren hämtar denna PAC-fil innan den begär andra webbadresser. URL:en för PAC-filen konfigureras antingen manuellt eller bestäms automatiskt av Web Proxy Auto-Discovery Protocol .

Sammanhang

Moderna webbläsare implementerar flera nivåer av automatisering; användare kan välja den nivå som passar deras behov. Följande metoder är vanligtvis implementerade:

  • Automatiskt val av proxy: Ange ett värdnamn och ett portnummer som ska användas för alla webbadresser. De flesta webbläsare låter dig ange en lista över domäner (som localhost ) som kommer att kringgå denna proxy.
  • Proxy auto-configuration (PAC): Ange URL:en för en PAC-fil med en JavaScript-funktion som bestämmer lämplig proxy för varje URL. Denna metod är mer lämplig för bärbara datoranvändare som behöver flera olika proxykonfigurationer, eller komplexa företagsinställningar med många olika proxyservrar.
  • Web Proxy Auto-Discovery Protocol (WPAD): Låt webbläsaren gissa platsen för PAC-filen genom DHCP- och DNS- uppslagningar.

Historia

Filformatet Proxy auto-config designades ursprungligen av Netscape 1996 för Netscape Navigator 2.0 och är en textfil som definierar minst en JavaScript-funktion.

PAC-filen

Enligt konventionen heter PAC-filen normalt proxy.pac . WPAD -standarden använder wpad.dat . .pac - filen förväntas innehålla minst en funktion:

FindProxyForURL(url, host) , med två argument och returvärde i ett specifikt format:
* url är URL:en till objektet
* host är värdnamnet som kommer från den URL:en. Syntaktisk är det samma sträng som mellan :// och den första : eller / efter det.
* return "..." är en sträng med signaturer i följande format (se exempel nedan):
    
               
   
    returnValue  =  typ host  ,  ":"  ,  port  ,[{  ";"  ,  returnValue  }];  typ  =  "DIREKT"  |  "PROXY"  |  "STRUMPAR"  |  "HTTP"  |  "HTTPS"  |  "SOCKS4"  |  "SOCKS5"  -värd  =  UTF16String  (* ECMA262-kompatibel UTF16-sträng *)  port  =  UTF16String  (* Siffror *) 


För att använda den publiceras en PAC-fil till en HTTP-server och klientanvändaragenter instrueras att använda den, antingen genom att ange URL:en i proxyanslutningsinställningarna för webbläsaren eller genom att använda WPAD-protokollet. URL:en kan också referera till en lokal fil som till exempel: file:///etc/proxy.pac .

Även om de flesta klienter kommer att bearbeta skriptet oavsett vilken MIME-typ som returneras i HTTP-svaret, för fullständighetens skull och för att maximera kompatibiliteten, bör HTTP-servern konfigureras för att deklarera MIME-typen för denna fil som antingen application/x- ns-proxy-autoconfig eller application/x-javascript-config .

Det finns få bevis för att gynna användningen av en MIME-typ framför den andra. Det skulle dock vara rimligt att anta att application/x-ns-proxy-autoconfig kommer att stödjas i fler klienter än application/x-javascript-config som det definierades i den ursprungliga Netscape-specifikationen, den senare typen kommer att användas mer nyligen.

Exempel

Ett mycket enkelt exempel på en PAC-fil är:

    
   
 function  FindProxyForURL  (  url  ,  host  )  {  return  'PROXY proxy.example.com:8080; DIREKT'   ;  } 

Den här funktionen instruerar webbläsaren att hämta alla sidor via proxyn på port 8080 på servern proxy.example.com . Om denna proxy inte svarar kontaktar webbläsaren webbsidan direkt, utan att använda en proxy. Det senare kan misslyckas om brandväggar eller andra mellanliggande nätverksenheter avvisar förfrågningar från andra källor än proxyn – en vanlig konfiguration i företagsnätverk.

Ett mer komplicerat exempel visar några tillgängliga JavaScript-funktioner som ska användas i FindProxyForURL -funktionen:

    
  
     
     
  

  
  
      
     
  

  
  
   
 function  FindProxyForURL  (  url  ,  host  )  {  // våra lokala URL:er från domänerna nedan example.com behöver ingen proxy:  if  (  shExpMatch  (  host  ,  '*.example.com'  ))  {  return  'DIRECT'  ;  }  // URL:er inom detta nätverk nås via  // port 8080 på fastproxy.example.com:  if  (  isInNet  (  host  ,  '10.0.0.0'  ,  '255.255.248.0'  ))  {  return  'PROXY fastproxy.example.com: 8080'  ;  }  // Alla andra förfrågningar går via port 8080 på proxy.example.com.  // om det inte svarar, gå direkt till WWW:  return  'PROXY proxy.example.com:8080; DIREKT'   ;  } 

Som standard betyder nyckelordet PROXY att en proxy som motsvarar protokollet för den ursprungliga begäran, vare sig det är http, https eller ftp, används. Andra sökords- och proxytyper som stöds inkluderar:

SOCKS
Använd en SOCKS proxy.
HTTP, HTTPS
Introduceras i nyare versioner av Firefox. Anger en HTTP(S)-proxy.
SOCKS4, SOCKS5
Introducerade i nyare versioner av Firefox. Anger SOCKS-protokollversionen.

Begränsningar

PAC-teckenkodning

Kodningen av PAC-skript är i allmänhet ospecificerad, och olika webbläsare och nätverksstackar har olika regler för hur PAC-skript får kodas. I allmänhet fungerar helt ASCII PAC-skript med vilken webbläsare eller nätverksstack som helst. Mozilla Firefox 66 och senare stöder dessutom PAC-skript kodade som UTF-8 .

DnsResolve

Funktionen dnsResolve (och liknande andra funktioner) utför en DNS- uppslagning som kan blockera webbläsaren under lång tid om DNS-servern inte svarar.

min IP-adress

MyIpAddress - funktionen har ofta rapporterats ge felaktiga eller oanvändbara resultat, t.ex. 127.0.0.1 , IP-adressen för den lokala värden. Det kan hjälpa att ta bort på systemets värdfil (t.ex. /etc/hosts på Linux) alla rader som hänvisar till maskinens värdnamn, medan raden 127.0.0.1 localhost kan, och bör, stanna. [ citat behövs ]

säkerhet

Under 2013 började forskare varna för säkerhetsriskerna med automatisk proxykonfiguration. Hotet innebär att man använder en PAC, som upptäcks automatiskt av systemet, för att omdirigera offrets webbläsartrafik till en angriparkontrollerad server istället.

Ett annat problem med pac-filen är att den typiska implementeringen involverar hämtning av klartext http, som inte inkluderar några säkerhetsfunktioner som kodsignering eller webbcertifikat. Angripare kan enkelt utföra man-in-midten-spoofing-attacker.

Gamla Microsoft-problem

Cachning av resultat för automatisk konfiguration av proxy efter domännamn i Microsofts Internet Explorer 5.5 eller senare begränsar flexibiliteten hos PAC-standarden. I själva verket kan du välja proxy baserat på domännamnet, men inte på webbadressens sökväg. Alternativt måste du inaktivera cachelagring av resultat för automatisk konfiguration av proxy genom att redigera registret , en process som beskrivs av de Boyne Pollard (listad i ytterligare läsning ).

Det rekommenderas att alltid använda IP-adresser istället för värddomännamn i isInNet- funktionen för kompatibilitet med andra Windows-komponenter som använder Internet Explorer PAC-konfiguration, såsom .NET 2.0 Framework . Till exempel,

     

      if  (  isInNet  (  host  ,  dnsResolve  (  sampledomain  ),  '255.255.248.0'  ))  {}  // .NET 2.0 kommer att lösa proxy korrekt  if  (  isInNet  (  host  ,  sampledomain  ,  '255.255.248.0'  ))  {}  // .NET 2.0 kommer inte att lösa proxy korrekt 

Den nuvarande konventionen är att misslyckas med direktanslutning när en PAC-fil inte är tillgänglig.

Kort efter byte mellan nätverkskonfigurationer (t.ex. när du går in i eller lämnar ett VPN), kan dnsResolve ge föråldrade resultat på grund av DNS-cache.

Till exempel håller Firefox vanligtvis 20 domänposter cachade i 60 sekunder. Detta kan konfigureras via konfigurationsvariablerna network.dnsCacheEntries och network.dnsCacheExpiration . Att spola systemets DNS-cache kan också hjälpa, vilket kan uppnås t.ex. i Linux med sudo-tjänsten dns-clean start eller i Windows med ipconfig /flushdns .

I Internet Explorer 9 returnerar isInNet('localHostName', 'second.ip', '255.255.255.255') true och kan användas som en lösning.

MyIpAddress - funktionen förutsätter att enheten har en enda IPv4-adress. Resultaten är odefinierade om enheten har mer än en IPv4-adress eller har IPv6-adresser.

Andra

Ytterligare begränsningar är relaterade till JavaScript-motorn på den lokala maskinen.

Avancerad funktionalitet

Mer avancerade PAC-filer kan minska belastningen på proxyservrar, utföra lastbalansering, fail over eller till och med svart / vit listning innan begäran skickas via nätverket. Man kan returnera flera proxyservrar:

  returnera  'PROXY proxy1.example.com:80; PROXY proxy2.example.com:8080'   ; 

Ovanstående kommer att försöka proxy1 först och om den inte är tillgänglig kommer den att försöka proxy2.

Anteckningar

  1. ^ "Navigator Proxy Auto-Config File Format" . Dokumentation för Netscape Navigator . Mars 1996. Arkiverad från originalet 2007-06-02 . Hämtad 2013-07-05 .
  2. ^ "Proxy Auto-Configuration (PAC) fil - HTTP | MDN" .
  3. ^ "Bug 1492938 - Proxy autoconfig-skript bör laddas som UTF-8 om de är giltiga UTF-8, annars som Latin-1 (en byte är en kodpunkt)" . Hämtad 2019-04-10 .
  4. ^ "Bug 347307 - Behöver ett sätt att bestämma den bästa lokala IP-adressen för PAC-filer att använda" . Hämtad 2022-04-18 .
  5. ^ Lemos, Robert (2013-03-06). "Cyberbrottslingar kommer sannolikt att utöka användningen av webbläsarproxies" . Hämtad 2016-04-20 .

Vidare läsning

av Boyne Pollard, Jonathan (2004). "Automatisk proxy-HTTP-serverkonfiguration i webbläsare" . Ofta givna svar . Hämtad 2013-07-05 .

externa länkar