Může být přesměrována IIS CGI HTTP_PROXY záhlaví požadavků

Příznaky

Při použití funkce služby IIS rozhraní CGI (Common Gateway) provozovat spustitelný program, který pomocí určité knihovny přesměrování požadavků, požadavků může být zaslán na nesprávné místo na základě přítomnosti požadavek záhlaví "PROXY". Při použití této knihovny je známo několik webových aplikací platformy. PHP, Python a Go, patří mimo jiné.

Příčina

CGI je rozhraní, které umožňuje webovému serveru k hostování aplikací, které běží jako spustitelné procesy. V případě, že webový server obdrží požadavek, je server spuštěn nový proces pro zpracování jedné žádosti. Po dokončení požadavku ukončení procesu. V pořadí pro přístup k data požadavku procesu jsou k dispozici jako proměnné prostředí, které mají "HTTP_" před jejich název hlavičky požadavku. Proto mají procesy CGI pro požadavky, které obsahují záhlaví s názvem "Proxy" proměnné prostředí "HTTP_PROXY", které mají stejnou hodnotu jako hlavičky požadavku.

Chcete-li povolit různé druhy aplikací tak, aby požadavky na různé druhy serverů, včetně serverů WWW se běžně používají kudrlinkou příkazového řádku a knihovny. Tuto knihovnu lze nakonfigurovat pomocí parametrů příkazového řádku, nebo jej číst parametrů konfigurace z proměnných prostředí hostitelského procesu. "HTTP_PROXY" je jedním z mnoha parametry konfigurace, které jsou používány otočení. Odeslat požadavek HTTP pomocí nakonfigurovaného serveru proxy používá kudrlinkou "HTTP_PROXY".

Poznámka: To nesouvisí s "HTTP_PROXY" jako znázornění hlavičky požadavku klienta.

Při otočení je hostována v rámci procesu CGI, obsahující proměnnou prostředí s názvem "HTTP_PROXY" proces, kudrlinkou jeho hodnotu používá k odesílání požadovaných dat prostřednictvím serveru proxy HTTP, jehož hodnota se zadává v proměnné prostředí. K tomu dochází, protože kudrlinkou očekává, že je "HTTP_PROXY" Konfigurace směrnice a nikoli hlavička požadavku klienta.

Jak potíže obejít

Chcete-li tento problém vyřešit, nepoužívejte CGI na serveru se spuštěnou službou IIS. CGI je z velké části zastaralé rozhraní, která je nahrazena novější a další související s výkonem. Konkrétně být hostovány PHP, Python a přejít přes FastCGI ve službě IIS. FastCGI nebude používat proměnné prostředí pro záhlaví požadavku klienta a nemá tento problém. Nicméně pro PHP, některé aplikace mohou používat funkce getenv() PHPs načíst proměnné prostředí. Pokud není ani PHP umístěn uvnitř proces CGI, injekcemi hodnot hlavičky požadavku do sady dat, které jsou k dispozici funkce getenv() replikaci chování CGI. Pokud používáte PHP aplikace, která načte http_proxy použit tímto způsobem, platí následující skutečnosti snižující závažnost rizika vymazání hodnotu hlavičky nebo zamítnutí žádosti s záhlaví PROXY.

Pokud máte z nějakého důvodu použít CGI, blokovat požadavky, které obsahují požadavek na záhlaví s názvem "Proxy" nebo zrušte hodnotu hlavičky.  Je to proto, že "Proxy" není název záhlaví standardní požadavek a prohlížečů obecně neodešle ji.

K blokování požadavku, který obsahuje záhlaví Proxy (nejlepší řešení), spusťte následující příkaz:
appcmd set config /section:requestfiltering / + requestlimits.headerLimits. [záhlaví proxy, sizelimit = "0" =]

Poznámka: Appcmd.exe obvykle není v cestě a lze nalézt v adresáři %systemroot%\system32\inetsrv

Chcete-li vymazat hodnotu hlavičky, můžete použít následující pravidlo revize URL:
<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>

Poznámka: Adresa URL revize je ke stažení přidat in služby IIS a není součástí výchozí instalace služby IIS.
Vlastnosti

ID článku: 3179800 - Poslední kontrola: 20. 1. 2017 - Revize: 1

Váš názor