HTTP_PROXY-Headeranforderungen von IIS CGI werden möglicherweise umgeleitet

Problembeschreibung
Wenn Sie die Funktion IIS Common Gateway Interface (CGI) zum Hosten eines ausführbaren Programms verwenden, das mithilfe einer bestimmten Bibliothek Anforderungen umleitet, werden Anforderungen aufgrund des Vorhandenseins eines „PROXY“-Anforderungsheaders möglicherweise an die falsche Adresse weitergeleitet. Von mehreren Webanwendungsplattformen ist bekannt, dass sie diese Bibliothek verwenden. Hierzu zählen unter anderem PHP, Python und Go.
Ursache
Bei CGI handelt es sich um eine Schnittstelle, mit deren Hilfe ein Webserver Anwendungen hosten kann, die als ausführbare Prozesse ausgeführt werden. Wenn ein Webserver eine Anforderung empfängt, startet der Server einen neuen Prozess zur Verarbeitung dieser Anforderung. Nach Abschluss der Anforderung wird der Prozess beendet. Damit der Prozess Zugriff auf die angeforderten Daten hat, werden Anforderungsheader als Umgebungsvariablen verwendet, deren Namen „HTTP_“ vorangestellt wird. Deshalb weisen CGI-Prozesse für Anforderungen, die den Header „Proxy“ enthalten, die Umgebungsvariable „HTTP_PROXY“ auf, die denselben Wert wie der Anforderungsheader hat.

Die cURL-Befehlszeile und die Bibliothek werden in der Regel verwendet, damit verschiedene Anwendungstypen verschiedene Servertypen, einschließlich Webservern, anfordern können. Diese Bibliothek kann mithilfe von Befehlszeilenparametern konfiguriert werden. Die Konfigurationsparameter können aber auch aus den Umgebungsvariablen des Hostprozesses gelesen werden. „HTTP_PROXY“ ist einer von vielen Konfigurationsparametern, die von cURL verwendet werden. „HTTP_PROXY“ wird von cURL zum Senden einer HTTP-Anforderung über den konfigurierten Proxy verwendet.

Hinweis Dies hat nichts mit „HTTP_PROXY“ als Darstellung eines Clientanforderungsheaders zu tun.

Wenn cURL im Rahmen eines CGI-Prozesses gehostet wird und dieser Prozess eine Umgebungsvariable namens „HTTP_PROXY“ enthält, verwendet cURL den Wert dieser Umgebungsvariablen, um angeforderte Daten über den HTTP-Proxy zu senden, dessen Wert in der Umgebungsvariablen angegeben ist. Dies ist darauf zurückzuführen, dass cURL davon ausgeht, dass „HTTP_PROXY“ eine Konfigurationsanweisung und kein Clientanforderungsheader ist.
Abhilfe
Um dieses Problem zu umgehen, sollten Sie CGI nicht auf einem Server verwenden, auf dem IIS ausgeführt wird. CGI ist eine weitgehend veraltete Schnittstelle, die durch neuere und leistungsorientiertere Schnittstellen ersetzt werden. Insbesondere PHP, Python und Go sollten in IIS über FastCGI gehostet werden. FastCGI verwendet keine Umgebungsvariablen für Clientanforderungsheader, weshalb dieses Problem nicht auftritt. Für PHP verwenden jedoch manche Anwendungen möglicherweise die getenv()-Funktion von PHP zum Abrufen von Umgebungsvariablen. Selbst wenn PHP nicht im Rahmen eines CGI-Prozesses gehostet wird, wird das Verhalten von CGI repliziert, indem Anforderungsheaderwerte in die Daten eingefügt werden, die für die getenv()-Funktion verfügbar sind. Wenn Sie eine PHP-Anwendung verwenden, die HTTP_PROXY auf diese Weise abruft, sollten Sie den Headerwert löschen oder Anforderungen mit einem PROXY-Header ablehnen.

Wenn Sie aus irgendeinem Grund CGI verwenden müssen, sollten Sie Anforderungen, die einen Anforderungsheader namens „Proxy“ enthalten, löschen oder den Wert des Headers löschen.  Dies liegt daran, dass „Proxy“ kein Standardname für Anforderungsheader ist und der Header deshalb im Allgemeinen nicht von Browsern gesendet wird.

Führen Sie die folgende Befehlszeile aus, um eine Anforderung zu blockieren, die einen Proxy-Header enthält (die bevorzugte Lösung):
appcmd set config /section:requestfiltering /+requestlimits.headerLimits.[header='proxy',sizelimit='0']

Hinweis appcmd.exe befindet sich in der Regel nicht in diesem Pfad, sondern ist im Verzeichnis „%systemroot%\system32\inetsrv“ gespeichert.

Verwenden Sie die folgende URL-Rewriteregel, um den Wert des Headers zu löschen:
<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>

Hinweis URL-Rewrite ist ein herunterladbares Add-In für IIS und ist nicht im Lieferumfang der Standardinstallation von IIS enthalten.
Eigenschaften

Artikelnummer: 3179800 – Letzte Überarbeitung: 08/02/2016 12:24:00 – Revision: 3.0

Windows 10, Windows 10 Version 1511, 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 Standard, Windows Server 2012 Essentials, Windows Server 2012 Foundation, Windows Server 2008 R2 Service Pack 1, Windows 7 Service Pack 1, Windows Server 2008 Service Pack 2, Windows Vista Service Pack 2

  • atdownload kbbug kbexpertiseinter kbfix kbsecbulletin kbsecurity kbsecvulnerability KB3179800
Feedback