Введение

Файл конфигурации для компьютерных сетей.

Файл автоматической настройки прокси (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 правильно определит прокси

if (isInNet(host, sampledomain, '255.255.248.0')) {} // .NET 2.0 не определит прокси правильно
```

В настоящее время принято переключаться на прямое соединение при недоступности файла 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-адреса.

Другие

Дальнейшие ограничения связаны с движком JavaScript на локальном компьютере.