stringtranslate.com

Автоконфигурация прокси

Файл автоматической настройки прокси-сервера ( PAC ) определяет, как веб-браузеры и другие пользовательские агенты могут автоматически выбирать соответствующий прокси-сервер (метод доступа) для получения заданного URL-адреса .

Файл PAC содержит функцию JavaScript . Эта функция возвращает строку с одной или несколькими спецификациями метода доступа. Эти спецификации заставляют пользовательский агент использовать определенный прокси-сервер или подключаться напрямую. [1] FindProxyForURL(url, host)

Множественные спецификации обеспечивают запасной вариант, когда прокси-сервер не отвечает. Браузер извлекает этот PAC-файл перед запросом других URL-адресов. URL-адрес файла PAC либо настраивается вручную, либо определяется автоматически протоколом автоматического обнаружения веб-прокси.

Контекст

Современные веб-браузеры реализуют несколько уровней автоматизации; пользователи могут выбрать уровень, соответствующий их потребностям. Обычно применяются следующие методы:

История

Формат файла автоконфигурации прокси-сервера был первоначально разработан Netscape в 1996 году для Netscape Navigator 2.0 [2] и представляет собой текстовый файл , который определяет по крайней мере одну функцию JavaScript.

PAC-файл

По соглашению файл PAC обычно называется proxy.pac. Стандарт WPAD использует wpad.dat. .pacОжидается, что файл будет содержать хотя бы одну функцию :

FindProxyForURL(url, host)с двумя аргументами и возвращаемым значением в определенном формате:
* — urlURL-адрес объекта
* host— имя хоста, полученное из этого URL-адреса. Синтаксически это та же строка, что и между ://первой :и /последующей. [3]
* return "..."— строка подписей в следующем формате (см. примеры ниже): [примечание 1]
 returnValue =  тип хоста , ":" , порт ,[{  ";" , returnValue }];  тип =  "ПРЯМОЙ"  |  "ПРОКСИ"  |  "НОСКИ"  |  «HTTP»  |  «HTTPS»  |  "НОСКИ4"  |  Хост «SOCKS5»  = UTF16String (* ECMA262-совместимая строка UTF16 *) порт = UTF16String (* Цифры *)   


Для его использования PAC-файл публикуется на HTTP-сервере , и клиентские пользовательские агенты получают указание использовать его либо путем ввода URL-адреса в настройках прокси-соединения браузера, либо с помощью протокола WPAD. URL-адрес также может ссылаться на локальный файл, например: file:///etc/proxy.pac.

Несмотря на то, что большинство клиентов будут обрабатывать сценарий независимо от типа MIME, возвращаемого в ответе HTTP, для полноты и максимальной совместимости HTTP-сервер должен быть настроен так, чтобы объявлять тип MIME этого файла либо application/x-ns-proxy-autoconfigили application/x-javascript-config.

Существует мало доказательств в пользу использования одного типа MIME перед другим. Однако было бы разумно предположить, что он application/x-ns-proxy-autoconfigбудет поддерживаться большим количеством клиентов, чем application/x-javascript-configэто было определено в исходной спецификации Netscape, причем последний тип стал использоваться совсем недавно.

Пример

Очень простой пример файла PAC:

функция FindProxyForURL ( url , хост ) { return 'PROXY proxy.example.com:8080; ПРЯМОЙ' ; }     

Эта функция дает браузеру указание получать все страницы через прокси-сервер через порт 8080 сервера proxy.example.com. Если этот прокси-сервер не отвечает, браузер связывается с веб-сайтом напрямую, без использования прокси-сервера. Последнее может дать сбой, если межсетевые экраны или другие промежуточные сетевые устройства отклоняют запросы от источников, отличных от прокси-сервера (обычная конфигурация в корпоративных сетях).

Более сложный пример демонстрирует некоторые доступные функции JavaScript, которые можно использовать в FindProxyForURLфункции:

function FindProxyForURL ( url , host ) { // нашим локальным URL-адресам из доменов ниже example.com не нужен прокси: if ( shExpMatch ( host , '*.example.com' )) { return 'DIRECT' ; }            // URL-адреса внутри этой сети доступны через // порт 8080 на fastproxy.example.com: if ( isInNet ( host , '10.0.0.0' , '255.255.248.0' )) { return 'PROXY fastproxy.example.com:8080 ' ; }          // Все остальные запросы проходят через порт 8080 proxy.example.com. // если он не отвечает, перейдите непосредственно в WWW: return 'PROXY proxy.example.com:8080; ПРЯМОЙ' ; }   

По умолчанию ключевое слово PROXY означает, что используется прокси, соответствующий протоколу исходного запроса, будь то http, https или ftp. Другие поддерживаемые типы ключевых слов и прокси включают:

НОСКИ
Используйте SOCKS- прокси.
HTTP, HTTPS
Представлено в более поздних версиях Firefox. Указывает прокси-сервер HTTP(S).
НОСКИ4, НОСКИ5
Представлено в более поздних версиях Firefox. Указывает версию протокола SOCKS.

Ограничения

Кодировка символов PAC

Кодировка сценариев PAC обычно не определена, и разные браузеры и сетевые стеки имеют разные правила кодирования сценариев PAC. В общем, полностью ASCII -скрипты PAC будут работать с любым браузером или сетевым стеком. Mozilla Firefox 66 и более поздние версии дополнительно поддерживают сценарии PAC в кодировке UTF-8 . [4]

DnsResolve

Эта функция dnsResolve(и подобные другие функции) выполняет поиск DNS , который может заблокировать браузер на длительное время, если DNS-сервер не отвечает.

myIpAddress

myIpAddressЧасто сообщается, что эта функция дает неправильные или непригодные для использования результаты, например 127.0.0.1, IP-адрес локального хоста. [5] Может помочь удалить в файле хоста системы (например, /etc/hostsв Linux) все строки, относящиеся к имени хоста машины, при этом эта строка 127.0.0.1 localhostможет и должна остаться. [ нужна цитата ]

Безопасность

В 2013 году исследователи начали предупреждать об угрозах безопасности, связанных с автоматической настройкой прокси. [6] Угроза предполагает использование PAC, автоматически обнаруженного системой, для перенаправления трафика браузера жертвы на сервер, контролируемый злоумышленником.

Другая проблема с pac-файлом заключается в том, что типичная реализация включает получение открытого HTTP-текста, который не включает в себя какие-либо функции безопасности, такие как подписывание кода или веб-сертификаты. Злоумышленники могут легко выполнить атаку «человек посередине» .

Старые проблемы Microsoft

Кэширование результатов автоматической настройки прокси-сервера по имени домена в Microsoft Internet Explorer 5.5 или новее ограничивает гибкость стандарта PAC. Фактически вы можете выбрать прокси-сервер на основе имени домена, а не пути URL-адреса. Как вариант, нужно отключить кэширование результатов автонастройки прокси, отредактировав реестр . [7]

Рекомендуется всегда использовать IP-адреса вместо имен доменов хостов в isInNetфункции для совместимости с другими компонентами Windows, которые используют конфигурацию PAC Internet Explorer, например .NET 2.0 Framework . Например,

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 на локальном компьютере.

Расширенная функциональность

Более продвинутые файлы PAC могут снизить нагрузку на прокси, выполнить балансировку нагрузки, аварийное переключение или даже внесение в черный / белый список перед отправкой запроса через сеть. Можно вернуть несколько прокси:

вернуть 'ПРОКСИ proxy1.example.com:80; ПРОКСИ proxy2.example.com:8080' ; 

Вышеуказанное сначала пробует прокси1, а если он недоступен, затем пробует прокси2.

Примечания

  1. ^ EBNF по обозначениям W3C

Рекомендации

  1. ^ «Файл автоматической настройки прокси (PAC) — HTTP | MDN» . http://developer.mozilla.org . 23 апреля 2023 г. Проверено 2 июля 2023 г.
  2. ^ «Формат файла автоматической настройки прокси-сервера Navigator» . Документация Netscape Navigator . Март 1996 г. Архивировано из оригинала 2 июня 2007 г. Проверено 5 июля 2013 г.
  3. ^ «Файл автоматической настройки прокси (PAC) — HTTP | MDN» . 23 апреля 2023 г.
  4. ^ «Ошибка 1492938 — сценарии автоконфигурации прокси-сервера должны загружаться как UTF-8, если они действительны UTF-8, в противном случае — как Latin-1 (байт — это кодовая точка)» . Проверено 10 апреля 2019 г.
  5. ^ «Ошибка 347307 — Нужен способ определить лучший локальный IP-адрес для использования файлов PAC» . Проверено 18 апреля 2022 г.
  6. ^ Лемос, Роберт (6 марта 2013 г.). «Киберпреступники, вероятно, расширят использование браузерных прокси» . Проверено 20 апреля 2016 г.
  7. ^ «Microsoft KB 271361 — Как отключить автоматическое кэширование прокси-сервера в Internet Explorer» . Проверено 27 июня 2024 г.

Внешние ссылки