stringtranslate.com

Configuración automática del proxy

Un archivo de configuración automática de proxy ( PAC ) define cómo los navegadores web y otros agentes de usuario pueden elegir automáticamente el servidor proxy apropiado (método de acceso) para obtener una URL determinada.

Un archivo PAC contiene una función JavaScript FindProxyForURL(url, host). Esta función devuelve una cadena con una o más especificaciones de método de acceso. Estas especificaciones hacen que el agente de usuario utilice un servidor proxy en particular o se conecte directamente. [1]

Existen varias especificaciones que ofrecen una alternativa cuando un proxy no responde. El navegador obtiene este archivo PAC antes de solicitar otras URL. La URL del archivo PAC se configura manualmente o se determina automáticamente mediante el protocolo de detección automática de proxy web.

Contexto

Los navegadores web modernos implementan varios niveles de automatización; los usuarios pueden elegir el nivel que sea adecuado a sus necesidades. Los métodos que se implementan habitualmente son los siguientes:

Historia

El formato de archivo de configuración automática de Proxy fue diseñado originalmente por Netscape en 1996 para Netscape Navigator 2.0 [2] y es un archivo de texto que define al menos una función de JavaScript.

Por convención, el archivo PAC normalmente se llama proxy.pac. El estándar WPAD utiliza wpad.dat. .pacSe espera que el archivo contenga al menos una función:

FindProxyForURL(url, host), con dos argumentos y valor de retorno en formato específico:
* urles la URL del objeto
* hostes el nombre de host derivado de esa URL. Sintácticamente, es la misma cadena que se encuentra entre ://y la primera :o /la siguiente. [3]
* return "..."es una cadena de firmas en el siguiente formato (ver ejemplos a continuación): [nota 1]
 returnValue =  tipo host , : , puerto , [{  ";" , returnValue }];  tipo =  "DIRECTO"  |  "PROXY"  |  "SOCKS"  |  "HTTP"  |  "HTTPS"  |  "SOCKS4"  |  "SOCKS5"  host =  UTF16String (* cadena UTF16 compatible con ECMA262 *)  puerto =  UTF16String (* dígitos *)


Para utilizarlo, se publica un archivo PAC en un servidor HTTP y se indica a los agentes de usuario del cliente que lo utilicen, ya sea ingresando la URL en la configuración de conexión proxy del navegador o mediante el uso del protocolo WPAD. La URL también puede hacer referencia a un archivo local, como por ejemplo: file:///etc/proxy.pac.

Aunque la mayoría de los clientes procesarán el script independientemente del tipo MIME devuelto en la respuesta HTTP, por el bien de la integridad y para maximizar la compatibilidad, el servidor HTTP debe configurarse para declarar que el tipo MIME de este archivo es application/x-ns-proxy-autoconfigo application/x-javascript-config.

Hay pocas pruebas que favorezcan el uso de un tipo MIME en lugar del otro. Sin embargo, sería razonable suponer que application/x-ns-proxy-autoconfigse admitirá en más clientes de application/x-javascript-configlos que se definieron en la especificación original de Netscape, y que el último tipo se empezó a utilizar más recientemente.

Ejemplo

Un ejemplo muy simple de un archivo PAC es:

función FindProxyForURL ( url , host ) { devolver 'PROXY proxy.example.com:8080; DIRECTO' ; }     

Esta función indica al navegador que debe recuperar todas las páginas a través del proxy en el puerto 8080 del servidor proxy.example.com. Si este proxy no responde, el navegador se comunica directamente con el sitio web, sin utilizar un proxy. Esto último puede fallar si los firewalls u otros dispositivos de red intermediarios rechazan las solicitudes de fuentes distintas del proxy, una configuración común en las redes corporativas.

Un ejemplo más complicado demuestra algunas funciones de JavaScript disponibles para usar en la FindProxyForURLfunción:

función FindProxyForURL ( url , host ) { // nuestras URL locales de los dominios debajo de example.com no necesitan un proxy: if ( shExpMatch ( host , '*.example.com' )) { return 'DIRECT' ; }            // Se accede a las URL dentro de esta red a través del puerto 8080 en fastproxy.example.com: if ( isInNet ( host , '10.0.0.0' , '255.255.248.0' )) { return 'PROXY fastproxy.example.com:8080' ; }          // Todas las demás solicitudes pasan por el puerto 8080 de proxy.example.com. // si no hay respuesta, vaya directamente a la WWW: return 'PROXY proxy.example.com:8080; DIRECT' ; }   

De forma predeterminada, la palabra clave PROXY significa que se utiliza un proxy correspondiente al protocolo de la solicitud original, ya sea http, https o ftp. Otros tipos de palabras clave y proxy admitidos son:

MEDIAS
Utilice un proxy SOCKS .
HTTP, HTTPS
Introducido en versiones más recientes de Firefox. Especifica un proxy HTTP(S).
CALCETINES 4, CALCETINES 5
Introducido en versiones más recientes de Firefox. Especifica la versión del protocolo SOCKS.

Limitaciones

Codificación de caracteres PAC

La codificación de los scripts PAC no suele estar especificada, y los distintos navegadores y pilas de red tienen distintas reglas sobre cómo se pueden codificar los scripts PAC. En general, los scripts PAC totalmente ASCII funcionarán con cualquier navegador o pila de red. Mozilla Firefox 66 y versiones posteriores también admiten scripts PAC codificados como UTF-8 . [4]

DnsResolve

La función dnsResolve(y otras funciones similares) realiza una búsqueda de DNS que puede bloquear el navegador durante mucho tiempo si el servidor DNS no responde.

myIpAddress

myIpAddressSe ha informado con frecuencia que la función arroja resultados incorrectos o inutilizables, por ejemplo 127.0.0.1, la dirección IP del host local. [5] Puede ser útil eliminar del archivo de host del sistema (por ejemplo , /etc/hostsen Linux) cualquier línea que haga referencia al nombre de host de la máquina, mientras que la línea 127.0.0.1 localhostpuede y debe permanecer. [ cita requerida ]

Seguridad

En 2013, los investigadores comenzaron a advertir sobre los riesgos de seguridad de la configuración automática de proxy. [6] La amenaza implica el uso de un PAC, descubierto automáticamente por el sistema, para redirigir el tráfico del navegador de la víctima a un servidor controlado por el atacante.

Otro problema con pac-file es que la implementación típica implica la recuperación de texto HTTP sin formato, que no incluye ninguna característica de seguridad como firma de código o certificados web. Los atacantes pueden realizar ataques de intermediarios fácilmente.

Viejos problemas de Microsoft

El almacenamiento en caché de los resultados de la configuración automática del proxy por nombre de dominio en Internet Explorer 5.5 o versiones más recientes de Microsoft limita la flexibilidad del estándar PAC. En efecto, puede elegir el proxy en función del nombre de dominio, pero no de la ruta de la URL. Como alternativa, debe desactivar el almacenamiento en caché de los resultados de la configuración automática del proxy editando el registro . [7]

Se recomienda utilizar siempre direcciones IP en lugar de nombres de dominio de host en la isInNetfunción para lograr compatibilidad con otros componentes de Windows que utilizan la configuración PAC de Internet Explorer, como .NET 2.0 Framework . Por ejemplo,

if ( isInNet ( host , dnsResolve ( sampledomain ), '255.255.248.0' )) {} // .NET 2.0 resolverá el proxy correctamente     if ( isInNet ( host , sampledomain , '255.255.248.0' )) {} // .NET 2.0 no resolverá el proxy correctamente     

La convención actual es conmutar por error a la conexión directa cuando un archivo PAC no está disponible.

Poco después de cambiar entre configuraciones de red (por ejemplo, al ingresar o salir de una VPN), dnsResolvees posible que se obtengan resultados desactualizados debido al almacenamiento en caché de DNS.

Por ejemplo, Firefox suele mantener en caché 20 entradas de dominio durante 60 segundos. Esto se puede configurar mediante las variables de configuración network.dnsCacheEntriesy . Vaciar la caché DNSnetwork.dnsCacheExpiration del sistema también puede resultar de ayuda, lo que se puede lograr, por ejemplo, en Linux con o en Windows con .sudo service dns-clean startipconfig /flushdns

En Internet Explorer 9, isInNet('localHostName', 'second.ip', '255.255.255.255')devuelve truey se puede utilizar como solución alternativa.

La myIpAddressfunción supone que el dispositivo tiene una única dirección IPv4. Los resultados no están definidos si el dispositivo tiene más de una dirección IPv4 o direcciones IPv6.

Otros

Existen otras limitaciones relacionadas con el motor de JavaScript en la máquina local.

Funcionalidad avanzada

Los archivos PAC más avanzados pueden reducir la carga en los servidores proxy, realizar un balanceo de carga, realizar una conmutación por error o incluso crear listas blancas o negras antes de que se envíe la solicitud a través de la red. Se pueden devolver varios servidores proxy:

devuelve 'PROXY proxy1.ejemplo.com:80; PROXY proxy2.ejemplo.com:8080' ; 

Lo anterior probará primero proxy1 y si no está disponible, probará proxy2.

Notas

  1. ^ EBNF según la notación W3C

Referencias

  1. ^ "Archivo de configuración automática de proxy (PAC) - HTTP | MDN". developer.mozilla.org . 2023-04-23 . Consultado el 2023-07-02 .
  2. ^ "Formato de archivo de configuración automática del proxy de Navigator". Documentación de Netscape Navigator . Marzo de 1996. Archivado desde el original el 2007-06-02 . Consultado el 2013-07-05 .
  3. ^ "Archivo de configuración automática de proxy (PAC) - HTTP | MDN". 23 de abril de 2023.
  4. ^ "Error 1492938: los scripts de configuración automática del proxy deben cargarse como UTF-8 si son UTF-8 válidos, de lo contrario como Latin-1 (un byte es un punto de código)" . Consultado el 10 de abril de 2019 .
  5. ^ "Error 347307: se necesita una forma de determinar la mejor dirección IP local para que la utilicen los archivos PAC" . Consultado el 18 de abril de 2022 .
  6. ^ Lemos, Robert (6 de marzo de 2013). "Es probable que los cibercriminales amplíen el uso de servidores proxy en los navegadores" . Consultado el 20 de abril de 2016 .
  7. ^ "Microsoft KB 271361 - Cómo deshabilitar el almacenamiento en caché automático de proxy en Internet Explorer" . Consultado el 27 de junio de 2024 .

Enlaces externos