Symptomen
Wanneer u de functie van IIS Common Gateway Interface (CGI) als host voor een uitvoerbaar programma dat het gebruik van een bepaalde bibliotheek aanvragen omleiden, kunnen aanvragen worden illegaal op basis van de aanwezigheid van een verzoek-header 'PROXY'. Gebruik deze bibliotheek zijn verschillende web application platforms bekend. Deze omvatten PHP, Python en Ga, onder andere.
Oorzaak
CGI is een interface waarmee een webserver host voor toepassingen die worden uitgevoerd als uitvoerbare processen. Wanneer een aanvraag wordt ontvangen door een webserver, start de server een nieuw proces dat één aanvraag te verwerken. Wanneer de aanvraag is voltooid, wordt het proces beëindigd. Om het proces van toegang hebben tot de aanvraaggegevens, worden de aanvraagheaders opgenomen als omgevingsvariabelen die "HTTP_" de functienaam geplaatst om hun naam hebben. CGI-processen voor aanvragen met een header met de naam 'Proxy' hebben daarom een "Gebruikt" omgevingsvariabele die dezelfde waarde hebben als de verzoek-header.
De opdrachtregel krul en bibliotheek worden vaak gebruikt om verschillende soorten toepassingen waarmee aanvragen naar verschillende soorten servers, inclusief webservers. Deze bibliotheek kan worden geconfigureerd met opdrachtregelparameters of de configuratieparameters van de omgevingsvariabelen host proces kan worden gelezen. "Gebruikt" is een groot aantal configuratieparameters die worden gebruikt door de krul. "Gebruikt" wordt voor het verzenden van HTTP-aanvragen via de geconfigureerde proxy gebruikt door krul.
Opmerking Dit is gerelateerd aan de 'Gebruikt' als de representatie van de verzoek-header van een client.
Bij krul wordt gehost in een CGI-proces, en dat proces bevat een omgevingsvariabele met de naam "Gebruikt", krul de waarde gebruikt voor het verzenden van gegevens via de HTTP-proxy waarvan de waarde is opgegeven in de omgevingsvariabele. Dit gebeurt omdat de krul wordt verwacht dat "Gebruikt" een configuratie-richtlijn en niet een aanvraagheader client is.
Tijdelijke oplossing
U kunt dit probleem omzeilen, gebruik geen CGI op een server waarop IIS wordt uitgevoerd. CGI is een grotendeels verouderd interface die wordt vervangen door nieuwere en meer prestatieproblemen en interfaces. PHP, Python en ga moet met name worden gehost door FastCGI op IIS. FastCGI maakt geen gebruik van omgevingsvariabelen voor client-aanvraagheaders en beschikt niet over dit probleem. Echter voor PHP, soms gebruiken bepaalde toepassingen PHPs getenv() -functie voor het ophalen van omgevingsvariabelen. Zelfs als PHP is niet opgenomen binnen een CGI-proces, repliceert het gedrag van de CGI injecteren verzoek-headerwaarden in de reeks gegevens beschikbaar zijn voor de functie getenv() . Als u een PHP-toepassing die wordt gebruikt op deze manier wordt opgehaald, zijn de volgende beperkingen van de header-waarde uit te schakelen of afkeuren van verzoeken met een PROXY-header van kracht.
Als u CGI gebruikt om een bepaalde reden hebt, aanvragen met een verzoek-header met de naam 'Proxy' blokkeren of wissen van de waarde van de header. Dit komt doordat "Proxy" geen standaard verzoek-header is en browsers wordt over het algemeen niet wilt verzenden.
Blokkeren van een aanvraag met een Proxy-header (beste oplossing), voert u de volgende opdrachtregel:
appcmd opgenomen set config /section:requestfiltering / + requestlimits.headerLimits. [kop proxy, sizelimit = "0" =]
Opmerking De appcmd.exe niet gewoonlijk in het pad en kunt u vinden in de map %systemroot%\system32\inetsrv
Schakel de waarde van de header, kunt u de volgende regel voor het herschrijven van 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>
Opmerking De URL herschrijven is een downloadbare toevoegen in IIS en wordt niet opgenomen in een standaardinstallatie van IIS.