Síntomas

Cuando utiliza la característica Common Gateway Interface (CGI) de IIS para alojar un programa ejecutable que utilice una determinada biblioteca para redirigir las solicitudes, las solicitudes pueden ser desviadas según la presencia de un encabezado de solicitud "PROXY". Varias plataformas de aplicaciones web suelen utilizar esta biblioteca. Entre ellas se incluyen PHP, Python y Go, entre otras.

Causa

CGI es una interfaz que permite a un servidor web para alojar aplicaciones que se ejecutan como procesos ejecutables. Cuando un servidor web recibe una solicitud, el servidor inicia un nuevo proceso para controlar dicha solicitud única. Cuando se complete la solicitud, se cierra el proceso. Para que el proceso tenga acceso a los datos de solicitud, los encabezados de solicitud se incluyen como variables de entorno que tienen "HTTP_" antepuesto a su nombre. Por lo tanto, los procesos CGI para las solicitudes que contienen un encabezado denominado "Proxy" tienen una variable de entorno "HTTP_PROXY" que tienen el mismo valor que el encabezado de solicitud.

La línea de comandos de rizo y la biblioteca se utilizan normalmente para permitir a diversos tipos de aplicaciones para realizar solicitudes a distintos tipos de servidores, incluidos servidores web. Esta biblioteca se puede configurar mediante los parámetros de línea de comandos, o puede leer sus parámetros de configuración de las variables de entorno de proceso de host. "HTTP_PROXY" es uno de los numerosos parámetros de configuración utilizados por doblez. cURL utiliza "HTTP_PROXY" para enviar una solicitud HTTP a través del proxy configurado.

Nota: Esto está relacionado con "HTTP_PROXY" como la representación de un encabezado de solicitud de cliente.

Cuando cURL está alojado dentro de un proceso CGI y ese proceso contiene una variable de entorno denominada "HTTP_PROXY", doblez utiliza su valor para enviar los datos solicitados a través del proxy HTTP cuyo valor se especifica en la variable de entorno. Esto ocurre porque cURL espera que "HTTP_PROXY" sea una directiva de configuración y no un encabezado de solicitud de cliente.

Solución alternativa

Para evitar este problema, no utilice CGI en un servidor que está ejecutando IIS. CGI es una interfaz obsoleta en gran medida que es reemplazada por las interfaces más recientes y más relacionados con el rendimiento. En concreto, PHP, Python y Go deben estar alojado mediante FastCGI en IIS. FastCGI no utiliza las variables de entorno para los encabezados de la solicitud de cliente y no tiene este problema. Sin embargo para PHP, algunas aplicaciones pueden utilizar la función de getenv() PHPs para recuperar las variables de entorno. Incluso cuando PHP no está hospedado dentro de un proceso CGI, replica el comportamiento CGI insertando los valores de encabezado de solicitud en el conjunto de datos disponibles para la función getenv(). Si utiliza una aplicación PHP que recupera HTTP_PROXY de esta manera, las mitigaciones de borrar el valor del encabezado o el rechazo de solicitudes con un encabezado PROXY siguientes son efectivas.

Si tiene que usar CGI por algún motivo, bloquee las solicitudes que contienen un encabezado denominado a "Proxy" o borre el valor del encabezado.  Esto es porque "Proxy" no es un nombre de encabezado de solicitud estándar y los exploradores generalmente no lo enviarán.

Para bloquear una solicitud que contiene un encabezado de Proxy (la solución preferida), ejecute la siguiente línea de comando:

appcmd set config /section:requestfiltering / + requestlimits.headerLimits. [header = 'proxy', sizelimit = '0']
Nota: El appcmd.exe no está normalmente en la ruta de acceso y puede encontrarse en el directorio %systemroot%\system32\inetsrv

Para borrar el valor del encabezado, puede utilizar la regla de reescritura de dirección URL siguiente:

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


Nota: URL Rewrite es un complemento descargable de IIS y no está incluido en una instalación predeterminada de IIS.

¿Necesita más ayuda?

Ampliar sus conocimientos
Explorar los cursos
Obtener nuevas características primero
Unirse a Microsoft Insider

¿Le ha sido útil esta información?

¿Cuál es tu grado de satisfacción con la calidad del lenguaje?
¿Qué ha afectado a tu experiencia?

¡Gracias por sus comentarios!

×