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 de JavaScript . 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. FindProxyForURL(url, host)
Varias especificaciones proporcionan 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 descubrimiento automático de proxy web .
Contexto
Los navegadores web modernos implementan varios niveles de automatización; los usuarios pueden elegir el nivel que se adapte a sus necesidades. Los siguientes métodos se implementan comúnmente:
- Selección automática de proxy: especifique un nombre de host y un número de puerto que se utilizarán para todas las URL. La mayoría de los navegadores le permiten especificar una lista de dominios (como
localhost
) que evitarán este proxy. - Configuración automática de proxy (PAC): especifique la URL de un archivo PAC con una función de JavaScript que determina el proxy adecuado para cada URL. Este método es más adecuado para usuarios de portátiles que necesitan varias configuraciones de proxy diferentes o configuraciones corporativas complejas con muchos proxies diferentes.
- Protocolo de descubrimiento automático de proxy web (WPAD): deje que el navegador adivine la ubicación del archivo PAC mediante búsquedas de DHCP y DNS .
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 [1] y es un archivo de texto que define al menos una función de JavaScript.
El archivo PAC
Por convención, el archivo PAC normalmente se denomina proxy.pac
. El estándar WPAD utiliza wpad.dat
. Se .pac
espera que el archivo contenga al menos una función:
FindProxyForURL(url, host)
, con dos argumentos y valor de retorno en formato específico:
- *
url
es la URL del objeto - *
host
es el nombre de host derivado de esa URL. Sintácticamente es la misma cadena que entre://
y el primero:
o/
después de eso. [2] - *
return "..."
es una cadena de firmas con el siguiente formato ( notación EBNF , consulte los ejemplos a continuación):returnValue = tipo host , ":" , puerto , [{ ";" , returnValue }]; type = "DIRECT" | "PROXY" | "CALCETINES" | "HTTP" | "HTTPS" | "SOCKS4" | "SOCKS5" anfitrión = UTF16String (* compatible con ECMA262 cadena UTF16 *) puerto = UTF16String (* Dígitos *)
Para usarlo, se publica un archivo PAC en un servidor HTTP , y los agentes de usuario del cliente reciben instrucciones para usarlo, ya sea ingresando la URL en la configuración de conexión del 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 la secuencia de comandos independientemente del tipo MIME devuelto en la respuesta HTTP , en aras de la integridad y para maximizar la compatibilidad, el servidor HTTP debe configurarse para declarar el tipo MIME de este archivo como application/x-ns-proxy-autoconfig
o application/x-javascript-config
.
Hay poca evidencia que favorezca el uso de un tipo MIME sobre el otro. Sin embargo, sería razonable suponer que application/x-ns-proxy-autoconfig
se admitirá en más clientes de los application/x-javascript-config
que se definieron en la especificación original de Netscape, el último tipo que entró en uso más recientemente.
Ejemplo
Un ejemplo muy simple de un archivo PAC es:
function FindProxyForURL ( url , host ) { return 'PROXY proxy.example.com:8080; DIRECTO ' ; }
Esta función indica al navegador que recupere 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 pone en contacto con el sitio web directamente, sin utilizar un proxy. Este último puede fallar si los firewalls u otros dispositivos de red intermediarios rechazan 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 ser utilizadas en la FindProxyForURL
función:
function 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 responde, vaya directamente a la WWW: return 'PROXY proxy.example.com:8080; DIRECTO ' ; }
Por defecto, 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 palabra clave y proxy admitidos incluyen:
- CALCETINES
- Utilice un proxy SOCKS .
- HTTP, HTTPS
- Introducido en versiones más recientes de Firefox. Especifica un proxy HTTP (S).
- CALCETINES4, CALCETINES5
- 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 generalmente no se especifica, y los diferentes navegadores y pilas de red tienen diferentes 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 . [3]
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
A myIpAddress
menudo se ha informado que la función da resultados incorrectos o inutilizables, por ejemplo 192.168.1.128
, la dirección IP del localhost. Puede ser útil eliminar en el archivo de host del sistema (por ejemplo, /etc/hosts
en Linux) cualquier línea que se refiera al nombre de host de la máquina, mientras que la línea 192.168.1.1 localhost
puede 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. [4] 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 sobre el archivo pac es que la implementación típica implica la recuperación http de texto sin cifrar, que no incluye ninguna característica de seguridad como firma de código o certificados web. El atacante puede realizar fácilmente un ataque de suplantación de identidad de intermediario.
Problemas antiguos 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 de Microsoft o más reciente limita la flexibilidad del estándar PAC. En efecto, puede elegir el proxy en función del nombre de dominio, pero no en la ruta de la URL. Alternativamente, debe deshabilitar el almacenamiento en caché de los resultados de la configuración automática del proxy editando el registro , un proceso descrito por de Boyne Pollard (que se enumera en la lectura adicional ).
Se recomienda utilizar siempre direcciones IP en lugar de nombres de dominio de host en la isInNet
función para la compatibilidad con otros componentes de Windows que utilizan la configuración de Internet Explorer PAC, como .NET 2.0 Framework . Por ejemplo,
if ( isInNet ( host , dnsResolve ( dominio de muestra ), '255.255.248.0' )) {} // .NET 2.0 resolverá el proxy correctamenteif ( 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 entrar o salir de una VPN), dnsResolve
puede dar resultados desactualizados debido al almacenamiento en caché de DNS.
Por ejemplo, Firefox generalmente mantiene en caché 20 entradas de dominio durante 60 segundos. Esto se puede configurar mediante las variables de configuración network.dnsCacheEntries
y network.dnsCacheExpiration
. Vaciar la caché de DNS del sistema también puede ayudar, lo que se puede lograr, por ejemplo, en Linux con sudo service dns-clean starto en Windows con ipconfig /flushdns.
En Internet Explorer 9, se isInNet('localHostName', 'second.ip', '255.255.255.255')
devuelve true
y se puede utilizar como solución alternativa.
La myIpAddress
función asume 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 tiene direcciones IPv6.
Otros
Otras limitaciones están relacionadas con el motor JavaScript en la máquina local.
Funcionalidad avanzada
Los archivos PAC más avanzados pueden reducir la carga en los proxies, realizar el equilibrio de carga, realizar una conmutación por error o incluso una lista en blanco y negro antes de que la solicitud se envíe a través de la red. Uno puede devolver múltiples proxies:
return 'PROXY proxy1.example.com:80; PROXY proxy2.example.com:8080 ' ;
Lo anterior probará primero con proxy1 y, si no está disponible, probará con proxy2.
Referencias
- ^ "Formato de archivo de configuración automática de Navigator Proxy" . Documentación de Netscape Navigator . Marzo de 1996. Archivado desde el original el 2 de junio de 2007 . Consultado el 5 de julio de 2013 .
- ^ https://developer.mozilla.org/en-US/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_(PAC)_file
- ^ "Error 1492938 - Los scripts de autoconfiguración de 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 .
- ^ Lemos, Robert (6 de marzo de 2013). "Es probable que los ciberdelincuentes amplíen el uso de proxies del navegador" . Consultado el 20 de abril de 2016 .
Otras lecturas
de Boyne Pollard, Jonathan (2004). "Configuración automática del servidor proxy HTTP en navegadores web" . Respuestas dadas con frecuencia . Consultado el 5 de julio de 2013 .
enlaces externos
- "Archivo de configuración automática de proxy (PAC)" . 2019-01-27.
- "Uso del archivo de configuración automática del cliente" . Guía del administrador de Netscape Proxy Server: Capítulo 11 . 1998-02-25. Archivado desde el original el 10 de agosto de 2004.
- "Capítulo 26 - Uso de configuración automática, proxy automático y detección automática" . Microsoft TechNet . Consultado el 5 de julio de 2013 .
- "Proxy Auto Config para Firefox (PAC). Ejemplos completamente funcionales que incluyen reglas de filtro anti-publicidad y anti-adultos" . 2012-05-12. Archivado desde el original el 1 de julio de 2015 . Consultado el 24 de mayo de 2009 .