프록시 자동 구성
Proxy auto-configProxy Auto-config(PAC; 프록시 자동 구성) 파일은 웹 브라우저 및 기타 사용자 에이전트가 특정 URL을 가져오기 위한 적절한 프록시 서버(액세스 방식)를 자동으로 선택하는 방법을 정의합니다.
PAC 파일에는 JavaScript 함수가 포함되어 있습니다. FindProxyForURL(url, host)
이 함수는 하나 이상의 액세스 방식 사양을 가진 문자열을 반환합니다.이러한 사양에 따라 사용자 에이전트는 특정 프록시 서버를 사용하거나 직접 연결합니다.
여러 사양은 프록시가 응답하지 않을 때 폴백을 제공합니다.브라우저는 다른 URL을 요구하기 전에 이 PAC 파일을 가져옵니다.PAC 파일의 URL은 수동으로 설정하거나 Web Proxy Auto-Discovery Protocol에 의해 자동으로 결정됩니다.
맥락
최신 웹 브라우저는 몇 가지 자동화 수준을 구현합니다. 사용자는 자신의 요구에 맞는 수준을 선택할 수 있습니다.일반적으로 구현되는 방법은 다음과 같습니다.
- 자동 프록시 선택:모든 URL 에 사용할 호스트명과 포토 번호를 지정합니다.대부분의 브라우저에서는 도메인 목록을 지정할 수 있습니다(예:
localhost
이 프록시를 바이패스합니다. - Proxy auto-configuration(PAC): 각 URL 에 적절한 프록시를 결정하는 JavaScript 함수가 있는 PAC 파일의 URL 을 지정합니다.이 방법은 여러 가지 프록시 구성이 필요하거나 여러 가지 프록시가 있는 복잡한 기업 설정이 필요한 노트북 사용자에게 더 적합합니다.
- Web Proxy Auto-Discovery Protocol(WPAD): 브라우저가 DHCP 및 DNS 검색을 통해 PAC 파일의 위치를 추측할 수 있습니다.
역사
Proxy auto-config 파일 형식은 원래 Netscape Navigator 2.0용으로[1] 1996년에 Netscape에 의해 설계되었으며 적어도1개의 JavaScript 함수를 정의하는 텍스트파일입니다.
PAC 파일
통상은, PAC 파일에는 이름이 붙여집니다.WPAD 표준에서는 를 사용합니다.그.pac
파일에는 적어도1개의 함수가 포함되어 있어야 합니다.
- 는 2개의 인수를 사용하여 특정 형식의 값을 반환합니다
FindProxyForURL(url, host)
.
- *는 객체의 URL입니다.
- *는 해당 URL에서 파생된 호스트 이름입니다. 구문적으로는 다음 URL에서 파생된 호스트 이름과
://
그리고 첫 번째:
또는/
그 [2]후에. - *는
return "..."
다음 형식의 시그니처 문자열입니다(아래 [note 1]예 참조).반환값= host를 입력합니다.,":",항구,[{ ";",반환값}]; 유형= "직접" '프록시" "SOCKS" "HTTP" "HTTPS" "SOCKS4" "SOCKS5" 주인= UTF16String(* ECMA262 호환 UTF16 문자열*) 항구= UTF16String(* 자리 *)
이를 사용하기 위해 PAC 파일은 HTTP 서버에 게시되며 클라이언트 사용자 에이전트는 브라우저의 프록시 연결 설정에 URL을 입력하거나 WPAD 프로토콜을 사용하여 이 파일을 사용하도록 지시됩니다.URL은 로컬파일을 참조할 수도 있습니다(예: ).
대부분의 클라이언트는 HTTP 응답에서 반환된 MIME 유형에 관계없이 스크립트를 처리하지만 완전성과 호환성을 최대화하기 위해 이 파일의 MIME 유형을 또는 로 선언하도록 HTTP 서버를 설정해야 합니다.
어떤 MIME 타입을 다른 타입보다 사용하는 것을 선호한다는 증거는 거의 없다.단, Netscape의 원래 사양에서 정의된 것보다 더 많은 클라이언트에서 지원된다고 가정하는 것이 합리적입니다.후자 유형은 최근 사용되고 있습니다.
예
PAC 파일의 간단한 예를 다음에 나타냅니다.
기능. Find Proxy For(프록시 검색 대상)URL (url, 주인) { 돌아가다 '프록시 proxy.example.com:8080; 다이렉트'; }
이 함수는 서버의 포트 8080에서 프록시를 통해 모든 페이지를 검색하도록 브라우저에 지시합니다.proxy.example.com
이 프록시가 응답하지 않으면 브라우저는 프록시를 사용하지 않고 직접 웹사이트에 접속합니다.파이어 월(fire wall)이나 그 외의 중간 네트워크 디바이스가 프록시 이외의 송신원으로부터의 요구를 거부하면, 후자가 실패하는 일이 있습니다.이것은 기업 네트워크의 일반적인 설정입니다.
좀 더 복잡한 예시는 사용 가능한 JavaScript 함수를 보여줍니다.FindProxyForURL
기능:
기능. Find Proxy For(프록시 검색 대상)URL (url, 주인) { // 아래 example.com 도메인의 로컬 URL에는 프록시가 필요하지 않습니다. 한다면 (shExpMatch(주인, '*.example.com')) { 돌아가다 '다이렉트; } // 이 네트워크 내의 URL에는 // fastproxy.example.com 포트 8080: 한다면 (InNet(주인, '10.0.0.0', '255.255.248.0')) { 돌아가다 '프록시 fastproxy.example.com:8080''; } // 기타 모든 요청은 proxy.example.com의 포트 8080을 통과합니다. // 이 응답하지 않으면 WWW로 직접 이동합니다. 돌아가다 '프록시 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 이후에는 UTF-8로 [3]인코딩된 PAC 스크립트가 추가로 지원됩니다.
DnsResolve
함수dnsResolve
(및 기타 유사한 기능)은 DNS 서버가 응답하지 않을 경우 브라우저를 장기간 차단할 수 있는 DNS 검색을 수행합니다.
myIpAddress
그myIpAddress
함수는 종종 [4]로컬호스트의 IP 주소 등 부정확하거나 사용할 수 없는 결과를 제공하는 것으로 보고되고 있습니다.시스템의 호스트 파일(Linux 등)에서 머신의 호스트명을 참조하는 행을 삭제할 수 있습니다.이 행은 그대로 [citation needed]둘 수 있습니다.
보안.
2013년에 연구자들은 프록시 자동 구성의 [5]보안 위험에 대해 경고하기 시작했다.이 위협에는 시스템에서 자동으로 검출된PAC를 사용하여 공격 대상자의 브라우저 트래픽을 공격자가 제어하는 서버로 리다이렉트하는 것이 포함됩니다.
pac 파일에 관한 또 다른 문제는 코드 서명이나 웹 증명서 등의 보안 기능이 포함되지 않은 클리어 텍스트http 취득을 수반하는 일반적인 실장입니다.공격자는 중간자 스푸핑 공격을 쉽게 수행할 수 있습니다.
오래된 Microsoft 문제
Microsoft Internet Explorer 5.5 이후 도메인 이름별로 프록시 자동 설정 결과를 캐시하면 PAC 표준의 유연성이 제한됩니다.실제로는 도메인 이름을 기반으로 프록시를 선택할 수 있지만 URL 경로에서는 선택할 수 없습니다.또는 레지스트리를 편집하여 프록시 자동 설정 결과의 캐시를 비활성화해야 합니다.이 프로세스는 de Boyne Pollard(상세 참조)에 기재되어 있습니다.
호스트 도메인 이름 대신 항상 IP 주소를 사용하는 것이 좋습니다.isInNet
는 Internet Explorer PAC 설정을 사용하는 다른 Windows 컴포넌트와의 호환성을 위해 기능합니다.NET 2.0 프레임워크예를들면,
한다면 (InNet(주인, dns 해결(샘플 도메인), '255.255.248.0')) {} // .NET 2.0은 프록시를 올바르게 해결합니다. 한다면 (InNet(주인, 샘플 도메인, '255.255.248.0')) {} // .NET 2.0으로 프록시가 올바르게 해결되지 않음
현재의 규칙은 PAC 파일을 사용할 수 없는 경우 직접 접속으로 페일오버하는 것입니다.
네트워크 구성 간 전환 직후(VPN 입력 및 종료 시 등)dnsResolve
DNS 캐싱으로 인해 오래된 결과를 얻을 수 있습니다.
예를 들어 Firefox는 보통 20개의 도메인 엔트리를 60초간 캐시합니다.이것은 및 설정 변수를 사용하여 설정할 수 있습니다.시스템의 DNS 캐시를 플러시하는 것도 도움이 될 수 있습니다.예를 들어 Linux 또는 Windows에서 실행할 수 있습니다.
Internet Explorer 9에서는isInNet('localHostName', 'second.ip', '255.255.255.255')
돌아온다true
회피책으로 사용할 수 있습니다.
그myIpAddress
함수는, 디바이스에 1 개의 IPv4 주소가 있는 것을 전제로 하고 있습니다.디바이스에 복수의 IPv4 주소가 있는 경우, 또는 IPv6 주소가 있는 경우는, 결과는 정의되지 않습니다.
다른이들
기타 제한사항은 로컬머신의 JavaScript 엔진과 관련되어 있습니다.
고도의 기능
고급 PAC 파일을 사용하면 프록시 부하 경감, 로드밸런싱 실행, 페일오버 실행, 또는 요구를 네트워크를 통해 송신하기 전에 블랙리스트/화이트리스트를 작성할 수 있습니다.1개는 여러 프록시를 반환할 수 있습니다.
돌아가다 'PROXY proxy1.example.com:80; PROXY PROXY2'example.com:8080';
위의 경우 먼저 proxy1을 시도하고 사용할 수 없는 경우 proxy2를 시도합니다.
메모들
레퍼런스
- ^ "Navigator Proxy Auto-Config File Format". Netscape Navigator Documentation. March 1996. Archived from the original on 2007-06-02. Retrieved 2013-07-05.
- ^ "Proxy Auto-Configuration (PAC) file - HTTP MDN".
- ^ "Bug 1492938 - Proxy autoconfig scripts should be loaded as UTF-8 if they are valid UTF-8, otherwise as Latin-1 (a byte is a code point)". Retrieved 2019-04-10.
- ^ "Bug 347307 - Need a way to determine the best local IP address for PAC files to use". Retrieved 2022-04-18.
- ^ Lemos, Robert (2013-03-06). "Cybercriminals Likely To Expand Use Of Browser Proxies". Retrieved 2016-04-20.
추가 정보
de Boyne Pollard, Jonathan (2004). "Automatic proxy HTTP server configuration in web browsers". Frequently Given Answers. Retrieved 2013-07-05.
외부 링크
- "Proxy Auto-Configuration (PAC) file". developer.mozilla.org. 2019-01-27.
- "Using the Client Autoconfiguration File". Netscape Proxy Server Administrator's Guide: Chapter 11. 1998-02-25. Archived from the original on 2004-08-10.
- "Chapter 26 - Using Automatic Configuration, Automatic Proxy, and Automatic Detection". Microsoft TechNet. Retrieved 2013-07-05.
- "Proxy Auto Config for Firefox (PAC). Fully working examples including anti-ad and anti-adult filter rules". 2012-05-12. Archived from the original on 2015-07-01. Retrieved 2009-05-24.