Se connecter avec Microsoft
S'identifier ou créer un compte.
Bonjour,
Sélectionnez un autre compte.
Vous avez plusieurs comptes
Choisissez le compte avec lequel vous voulez vous connecter.

Symptômes

En cas d'utilisation de la fonctionnalité IIS CGI (Common Gateway Interface) pour héberger un programme exécutable qui utilise une bibliothèque donnée pour rediriger les requêtes, les requêtes peuvent être redirigée de manière incorrecte en fonction de la présence d'un en-tête de requête « PROXY ». Plusieurs plateformes d'application web utilisent cette bibliothèque. Il s'agit notamment de PHP, Python et Go.

Cause

CGI est une interface qui permet à un serveur web d'héberger des applications exécutées en tant que processus exécutables. Lorsqu'un serveur web reçoit une requête, il démarre un nouveau processus pour traiter cette requête. Ce processus se ferme une fois la requête terminée. Pour que le processus puisse accéder aux données de la requête, les en-têtes de la requête sont inclus en tant que variables d'environnement dont le nom comporte le préfixe « HTTP_ ». Par conséquent, les processus CGI portant sur des requêtes qui contiennent un en-tête nommé « Proxy » comportent une variable d'environnement « HTTP_PROXY » dont la valeur correspond à l'en-tête de requête.

La bibliothèque et la ligne de commande cURL sont généralement utilisées pour permettre à différents types d'applications d'effectuer des requêtes destinées à différents types de serveurs, y compris des serveurs web. Cette bibliothèque peut être configurée à l'aide de paramètres de ligne de commande, mais elle peut également lire ses paramètres de configuration dans les variables d'environnement du processus hôte. « HTTP_PROXY » est l'un des nombreux paramètres de configuration utilisés par cURL. « HTTP_PROXY » est utilisé par cURL pour envoyer une requête HTTP via le proxy configuré.

Remarque Ce paramètre n'est pas lié à « HTTP_PROXY » en tant que représentation d'un en-tête de requête client.

Lorsque cURL est hébergé dans un processus CGI qui contient une variable d'environnement nommée « HTTP_PROXY », cURL utilise cette valeur pour envoyer les données demandées via le proxy HTTP dont la valeur est spécifiée dans la variable d'environnement. En effet, cURL s'attend à ce que « HTTP_PROXY » soit une directive de configuration, non pas un en-tête de requête client.

Contournement

Pour résoudre ce problème, n'utilisez pas CGI sur un serveur exécutant IIS. L'interface CGI est relativement obsolète et est remplacée par de nouvelles interfaces davantage axées sur les performances. En particulier, les plateformes PHP, Python et Go doivent être hébergées via FastCGI sur IIS. Ce problème ne se produit pas avec FastCGI, car il n'utilise pas de variables d'environnement pour les en-têtes de requête client. Toutefois, pour PHP, certaines applications peuvent utiliser la fonction PHP getenv() pour récupérer les variables d'environnement. Même lorsque PHP n'est pas hébergé dans un processus CGI, il réplique le comportement CGI en injectant des valeurs d'en-tête de requête dans l'ensemble de données disponibles pour sa fonction getenv(). En cas d'utilisation d'une application PHP qui récupère HTTP_PROXY de cette manière, les solutions d'atténuation suivantes consistant à effacer la valeur d'en-tête ou à rejeter les requêtes avec un en-tête PROXY sont efficaces.

Si vous devez utiliser CGI pour une raison ou l'autre, bloquez les requêtes contenant un en-tête de requête nommé « Proxy » ou effacez la valeur de l'en-tête.  En effet, « Proxy » n'est pas un nom d'en-tête de requête standard et les navigateurs ne l'envoient généralement pas.

Pour bloquer une requête contenant un en-tête Proxy (solution privilégiée), exécutez la ligne de commande suivante :

appcmd set config /section:requestfiltering /+requestlimits.headerLimits.[header='proxy',sizelimit='0']
Remarque Le fichier appcmd.exe n'est généralement pas situé dans le chemin ; il se trouve plutôt dans le répertoire %systemroot%\system32\inetsrv.

Pour effacer la valeur de l'en-tête, vous pouvez utiliser la règle de réécriture d'URL (URL Rewrite) suivante :

<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>


Remarque Le module de réécriture d'URL est un composant téléchargeable pour IIS et n'est pas inclus dans l'installation IIS par défaut.

Besoin d’aide ?

Vous voulez plus d’options ?

Explorez les avantages de l’abonnement, parcourez les cours de formation, découvrez comment sécuriser votre appareil, etc.

Les communautés vous permettent de poser des questions et d'y répondre, de donner vos commentaires et de bénéficier de l'avis d'experts aux connaissances approfondies.

Ces informations vous ont-elles été utiles ?

Dans quelle mesure êtes-vous satisfait(e) de la qualité de la langue ?
Qu’est-ce qui a affecté votre expérience ?
En cliquant sur Envoyer, vos commentaires seront utilisés pour améliorer les produits et services de Microsoft. Votre administrateur informatique sera en mesure de collecter ces données. Déclaration de confidentialité.

Nous vous remercions de vos commentaires.

×