Введение
Файл конфигурации для компьютерных сетей.
Файл автоматической настройки прокси (PAC) определяет, как веб-браузеры и другие пользовательские агенты могут автоматически выбирать подходящий прокси-сервер (метод доступа) для получения заданного URL. Файл PAC содержит функцию JavaScript FindProxyForURL(url, host). Эта функция возвращает строку с указанием одного или нескольких методов доступа. Эти указания предписывают пользовательскому агенту использовать конкретный прокси-сервер или подключаться напрямую. Несколько указаний обеспечивают резервный вариант в случае недоступности прокси-сервера. Браузер загружает этот файл PAC перед запросом других URL-адресов. URL-адрес файла PAC может быть настроен вручную или определен автоматически с помощью протокола автоматического обнаружения прокси-серверов (Web Proxy Auto Discovery Protocol).
Контекст
Современные веб-браузеры реализуют несколько уровней автоматизации; пользователи могут выбрать уровень, соответствующий их потребностям. Обычно используются следующие методы:
Автоматический выбор прокси: укажите имя хоста и номер порта для использования со всеми URL-адресами. Большинство браузеров позволяют указать список доменов (например, localhost), которые будут исключены из использования этого прокси. Автоматическая настройка прокси (PAC): укажите URL-адрес файла PAC, содержащего функцию JavaScript, определяющую подходящий прокси для каждого URL-адреса. Этот метод особенно удобен для пользователей ноутбуков, которым требуется несколько различных конфигураций прокси, или для сложных корпоративных сетей с множеством различных прокси-серверов. Протокол автоматического обнаружения веб-прокси (WPAD): позволяет браузеру автоматически определять местоположение файла PAC с помощью запросов DHCP и DNS.
История
Формат файла автоматической настройки прокси был изначально разработан компанией Netscape в 1996 году для Netscape Navigator 2.0 и представляет собой текстовый файл, содержащий как минимум одну функцию JavaScript.
Кодирование символов PAC
Кодировка скриптов PAC обычно не специфицирована, и различные браузеры и сетевые стеки используют разные правила для кодирования этих скриптов. Как правило, скрипты PAC, состоящие исключительно из символов ASCII, будут работать с любым браузером или сетевым стеком. Mozilla Firefox 66 и более поздних версий также поддерживает скрипты PAC, закодированные в UTF-8.
DnsResolve (Определить)
Функция dnsResolve (и другие подобные функции) выполняет поиск DNS, который может надолго заблокировать работу браузера, если DNS-сервер не отвечает.
myIpAddress (моя ИПадрес)
Функция myIpAddress часто сообщает некорректные или непригодные для использования результаты, например, 127.0.0.1, IP-адрес локального хоста. Может помочь удалить из файла hosts системы (например, /etc/hosts в Linux) любые строки, ссылающиеся на имя хоста машины, при этом строку 127.0.0.1 localhost можно и следует оставить.
Безопасность
В 2013 году исследователи начали предупреждать о рисках безопасности, связанных с автоматической настройкой прокси. Угроза заключается в использовании файла PAC, автоматически обнаруживаемого системой, для перенаправления трафика браузера жертвы на сервер, контролируемый злоумышленником. Другая проблема с файлами PAC состоит в том, что их типичная реализация предполагает получение данных по незащищенному протоколу HTTP, который не включает в себя механизмы безопасности, такие как цифровая подпись кода или веб-сертификаты. Это позволяет злоумышленникам легко проводить атаки типа "человек посередине".
Старые проблемы Microsoft
Кэширование результатов автоматической настройки прокси по доменному имени в Microsoft Internet Explorer 5.5 или более поздней версии ограничивает гибкость стандарта PAC. По сути, вы можете выбирать прокси на основе доменного имени, но не на пути URL. В качестве альтернативы необходимо отключить кэширование результатов автоматической настройки прокси, отредактировав реестр, что описано де Бойном Поллардом (указано в разделе "Дополнительная информация"). Рекомендуется всегда использовать IP-адреса вместо доменных имен хоста в функции `isInNet` для совместимости с другими компонентами Windows, использующими конфигурацию PAC Internet Explorer, например, .NET Framework 2.0. Например:
if (isInNet(host, dnsResolve(sampledomain), '255.255.248.0')) {} // NET 2.0 will resolve proxy properly
if (isInNet(host, sampledomain, '255.255.248.0')) {} // NET 2.0 will not resolve proxy properly
The current convention is to fail over to direct connection when a PAC file is unavailable. Shortly after switching between network configurations (e. g. when entering or leaving a VPN), dnsResolve may give outdated results due to DNS caching. For instance, Firefox usually keeps 20 domain entries cached for 60 seconds. This may be configured via the network. dnsCacheEntries and network. dnsCacheExpiration configuration variables. Flushing the system's DNS cache may also help, which can be achieved e. g. in Linux with sudo service dns clean start or in Windows with ipconfig /flushdns. On Internet Explorer 9, isInNet('localHostName', 'second. ip', '255.255.255.255') returns true and can be used as a workaround. The myIpAddress function assumes that the device has a single IPv4 address. The results are undefined if the device has more than one IPv4 address or has IPv6 addresses.
```
if (isInNet(host, dnsResolve(sampledomain), '255.255.248.0')) {} // .NET 2.0 правильно определит прокси
if (isInNet(host, dnsResolve(sampledomain), '255.255.248.0')) {} // NET 2.0 will resolve proxy properly
if (isInNet(host, sampledomain, '255.255.248.0')) {} // NET 2.0 will not resolve proxy properly
The current convention is to fail over to direct connection when a PAC file is unavailable. Shortly after switching between network configurations (e. g. when entering or leaving a VPN), dnsResolve may give outdated results due to DNS caching. For instance, Firefox usually keeps 20 domain entries cached for 60 seconds. This may be configured via the network. dnsCacheEntries and network. dnsCacheExpiration configuration variables. Flushing the system's DNS cache may also help, which can be achieved e. g. in Linux with sudo service dns clean start or in Windows with ipconfig /flushdns. On Internet Explorer 9, isInNet('localHostName', 'second. ip', '255.255.255.255') returns true and can be used as a workaround. The myIpAddress function assumes that the device has a single IPv4 address. The results are undefined if the device has more than one IPv4 address or has IPv6 addresses.
if (isInNet(host, sampledomain, '255.255.248.0')) {} // .NET 2.0 не определит прокси правильно
```
if (isInNet(host, dnsResolve(sampledomain), '255.255.248.0')) {} // NET 2.0 will resolve proxy properly
if (isInNet(host, sampledomain, '255.255.248.0')) {} // NET 2.0 will not resolve proxy properly
The current convention is to fail over to direct connection when a PAC file is unavailable. Shortly after switching between network configurations (e. g. when entering or leaving a VPN), dnsResolve may give outdated results due to DNS caching. For instance, Firefox usually keeps 20 domain entries cached for 60 seconds. This may be configured via the network. dnsCacheEntries and network. dnsCacheExpiration configuration variables. Flushing the system's DNS cache may also help, which can be achieved e. g. in Linux with sudo service dns clean start or in Windows with ipconfig /flushdns. On Internet Explorer 9, isInNet('localHostName', 'second. ip', '255.255.255.255') returns true and can be used as a workaround. The myIpAddress function assumes that the device has a single IPv4 address. The results are undefined if the device has more than one IPv4 address or has IPv6 addresses.
В настоящее время принято переключаться на прямое соединение при недоступности файла PAC. Вскоре после переключения между сетевыми конфигурациями (например, при подключении или отключении от VPN) `dnsResolve` может возвращать устаревшие результаты из-за кэширования DNS. Например, Firefox обычно кэширует 20 доменных записей в течение 60 секунд. Это можно настроить с помощью переменных конфигурации `network.dnsCacheEntries` и `network.dnsCacheExpiration`. Также может помочь очистка кэша DNS системы, например, в Linux с помощью `sudo service dns clean start` или в Windows с помощью `ipconfig /flushdns`. В Internet Explorer 9 `isInNet('localHostName', 'second.ip', '255.255.255.255')` возвращает `true` и может использоваться как обходной путь. Функция `myIpAddress` предполагает, что устройство имеет один IPv4-адрес. Результаты не определены, если у устройства более одного IPv4-адреса или есть IPv6-адреса.
if (isInNet(host, dnsResolve(sampledomain), '255.255.248.0')) {} // NET 2.0 will resolve proxy properly
if (isInNet(host, sampledomain, '255.255.248.0')) {} // NET 2.0 will not resolve proxy properly
The current convention is to fail over to direct connection when a PAC file is unavailable. Shortly after switching between network configurations (e. g. when entering or leaving a VPN), dnsResolve may give outdated results due to DNS caching. For instance, Firefox usually keeps 20 domain entries cached for 60 seconds. This may be configured via the network. dnsCacheEntries and network. dnsCacheExpiration configuration variables. Flushing the system's DNS cache may also help, which can be achieved e. g. in Linux with sudo service dns clean start or in Windows with ipconfig /flushdns. On Internet Explorer 9, isInNet('localHostName', 'second. ip', '255.255.255.255') returns true and can be used as a workaround. The myIpAddress function assumes that the device has a single IPv4 address. The results are undefined if the device has more than one IPv4 address or has IPv6 addresses.
Другие
Дальнейшие ограничения связаны с движком JavaScript на локальном компьютере.