Gäller för
Windows 10 Windows 10, version 1511, all editions Windows Server 2012 R2 Datacenter Windows Server 2012 R2 Standard Windows Server 2012 R2 Essentials Windows Server 2012 R2 Foundation Windows 8.1 Enterprise Windows 8.1 Pro Windows 8.1 Windows RT 8.1 Windows Server 2012 Datacenter Windows Server 2012 Datacenter Windows Server 2012 Standard Windows Server 2012 Standard Windows Server 2012 Essentials Windows Server 2012 Foundation Windows Server 2012 Foundation Windows Server 2008 R2 Service Pack 1 Windows Server 2008 R2 Datacenter Windows Server 2008 R2 Enterprise Windows Server 2008 R2 Standard Windows Server 2008 R2 Web Edition Windows Server 2008 R2 Foundation Windows 7 Service Pack 1 Windows 7 Ultimate Windows 7 Enterprise Windows 7 Professional Windows 7 Home Premium Windows 7 Home Basic Windows 7 Starter Windows Server 2008 Service Pack 2 Windows Server 2008 Datacenter Windows Server 2008 Enterprise Windows Server 2008 Standard Windows Server 2008 Web Edition Windows Server 2008 Foundation Windows Server 2008 for Itanium-Based Systems Windows Vista Service Pack 2 Windows Vista Ultimate Windows Vista Enterprise Windows Vista Business Windows Vista Home Premium Windows Vista Home Basic Windows Vista Starter

Symptom

När du använder funktionen IIS Common Gateway Interface (CGI) som värd för ett körbart program som använder ett visst bibliotek för att omdirigera begäranden kan begäranden vara misdirected baserat på förekomsten av en "PROXY" begärans huvud. Flera plattformar för webben är känt för att använda biblioteket. Dessa inkluderar PHP, Python och gå, bland annat.

Orsak

CGI är ett gränssnitt som gör att en server som värd för program som körs som körbara processer. När en begäran tas emot av en webbserver, startar servern en ny process för att hantera denna begäran. När begäran är slutförd avslutar processen. För att processen ska ha åtkomst till data för begäran inkluderas begärandehuvuden som miljövariabler som har "HTTP_" inledd till sitt eget namn. Därför har CGI-processer för förfrågningar som innehåller ett sidhuvud som heter "Proxy" miljövariabeln "HTTP_PROXY" som har samma värde som begärans huvud.CURL-kommandoraden och bibliotek används ofta för att aktivera olika typer av program för att göra förfrågningar till olika typer av servrar, inklusive webbservrar. Det här biblioteket kan konfigureras med hjälp av kommandoradsparametrar eller det kan läsa sina konfigurationsparametrar från miljövariabler för host process. "HTTP_PROXY" är en av många konfigurationsparametrar som används av vändningen. "HTTP_PROXY" används av cURL för att skicka en HTTP-begäran till den konfigurerade proxyn.Obs!  Det har inget "HTTP_PROXY" som representation av en klient begärans huvud.När vändningen finns inom en CGI-process och som processen innehåller en miljövariabel med namnet "HTTP_PROXY", använder cURL dess värde för att skicka begärda data via HTTP-proxy vars värde anges i miljövariabeln. Detta beror på att vändningen förväntar sig att "HTTP_PROXY" är ett direktiv för konfiguration och inte en klient begärans huvud.

Temporär lösning

Undvik problemet genom att inte använda CGI på en server som kör IIS. CGI är en till stor del föråldrad gränssnitt som ersätts av nyare och fler prestandarelaterade gränssnitt. PHP, Python och gå bör särskilt finnas för via FastCGI på IIS. FastCGI använder inte miljövariabler för klienten begärandehuvuden och har inte problemet. Men för PHP, vissa program kan använda PHPs getenv() funktion för att hämta miljövariabler. Även om PHP inte finns innanför en CGI-process, replikerar CGI-beteendet genom att injicera begäran huvudvärden i datauppsättningen tillgänglig getenv() funktion. Om du använder ett PHP-program som hämtar HTTP_PROXY på det här sättet är de följande mildrande åtgärder av clearing-värde för sidhuvud eller Avvisa begäran med en PROXY-huvud.Om du behöver använda CGI av någon anledning, blockera förfrågningar som innehåller ett huvud med namnet "Proxy" eller rensa värdet i huvudet.  Detta beror på att "Proxy" är inte en vanlig begäran huvudnamn och webbläsare kommer i allmänhet inte att skicka den.Om du vill blockera en begäran som innehåller en Proxy-huvud (bästa lösningen) kör du följande kommando:

Appcmd ange config /section:requestfiltering / + requestlimits.headerLimits. [huvud = proxy, sizelimit = '0']Obs!  Appcmd.exe brukar inte sökvägen och finns i katalogen %systemroot%\system32\inetsrvDu kan använda följande URL omarbetning regel för att rensa värdet i huvudet:

<system.webServer>    <rewrite>        <rules>            <rule name="Erase HTTP_PROXY" patternSyntax="Wildcard">                <match url="*.*" />                <serverVariables>                    <set name="HTTP_PROXY" value="" />                </serverVariables>                <action type="None" />            </rule>        </rules>    </rewrite></system.webServer>

Obs! URL: en omarbetning är ett hämtningsbart tillägg till IIS och ingår inte i en standardinstallation av IIS.

Behöver du mer hjälp?

Vill du ha fler alternativ?

Utforska prenumerationsförmåner, bläddra bland utbildningskurser, lär dig hur du skyddar din enhet med mera.