网络代理自动发现协议

**網路代理自動發現協定**（**Web Proxy Auto-Discovery Protocol**，**WPAD**）是一種客戶端使用 DHCP 和 / 或 DNS 發現方法來定位一個設定檔 URL 的方法。在檢測和下載設定檔後，它可以執行設定檔以測定特定 URL 應使用的代理。

## 歷史

WPAD 協定僅概述了發現該檔案位置的機制，而最常被部署的檔案格式是最初由網景在 1996 年為 Netscape Navigator 2.0 設計的代理自動組態格式。WPAD 協定由一個包括 Inktomi、微軟、RealNetworks 和昇陽電腦（現為甲骨文公司）公司組成的聯盟起草。WPAD 被文件化的網際網路草案已在 1999 年 12 月到期，但 WPAD 仍被所有主要瀏覽器支援。WPAD 在 Internet Explorer 5.0 中被首次引入。

## 上下文

若要為組織中的所有瀏覽器提供相同的代理策略，而無需手動組態每個瀏覽器，需要使用下列兩種技術：

* 代理自動組態（PAC）標準：建立和發布一個中央代理設定檔。細節詳見上述條目。
* 網路代理自動發現協定（WPAD）標準：確保組織中的瀏覽器在非手動組態的情況下找到檔案。這是本條目的範疇。

WPAD 標準定義了兩種備用方法，系統管理員可以用它們發布代理設定檔的位置，它們是使用動態主機設定協定（DHCP）或域名系統（DNS）：

在取得第一個頁面前，實現有此方法的網頁瀏覽器給本地 DHCP 伺服器傳送一個 DHCPINFORM 查詢，並使用伺服器的回覆中的 WPAD 選項。如果 DHCP 伺服器沒有提供所需的資訊，則再使用 DNS。假設使用者的電腦網路名稱為 _pc.department.branch.example.com_，瀏覽器將依次嘗試下列 URL，以期成功在客戶端的域中找到一個代理設定檔：

* http://wpad.department.branch.example.com/wpad.dat
* http://wpad.branch.example.com/wpad.dat
* http://wpad.example.com/wpad.dat
* http://wpad.com/wpad.dat（在不正確的實現中。參閱下面的「安全」章節）

（注意：上述例子不是實際「線上」的 URL，其中的域名被採用保留域名「example.com」替代。）

在 Windows 上，如果 DNS 查詢不成功，那麼將使用本地鏈路多播名稱解析（LLMNR）或 NetBIOS。

## 要點

DHCP 比 DNS 有著更高的優先級：如果 DHCP 提供了 WPAD URL，則不會進行 DNS 查詢。只能配合 DHCPv4 使用，WPAD-Option 選項沒有在 DHCPv6 中定義。
應注意 Firefox 不支援 DHCP，只進行 DNS 查詢，並且非 Windows、ChromeOS 平台以及版本號小於 13 的 Chrome 也是如此。

當構造查詢封包時，DNS 查詢將剔除域名的首個部分（客戶端的主機名）並以 _wpad_ 取代。然後，它通過移除更多域名的部分來在階層中「向上移動」，直到它找到一個 WPAD PAC 檔案或者離開當前組織。

瀏覽器會猜測組織的邊界。這種猜測對於「company.com」或「university.edu」等是正確的，但對於「company.co.uk」出錯（見下面的「安全」章節）。

對於 DNS 查詢，設定檔的路徑始終為 _wpad.dat_。對於 DHCP 協定，任何 URL 均可。由於傳統原因，PAC 檔案通常名為 _proxy.pac_（當然，此名稱的檔案將被 WPAD DNS 搜尋忽略）

設定檔的 MIME 類型必須為「application/x-ns-proxy-autoconfig」。參見代理自動組態了解更多資訊。

Internet Explorer 和 Konqueror 是目前唯一同時支援 DHCP 和 DNS 方法的瀏覽器；大多數主要瀏覽器都支援 DNS 方法。

## 前提條件

為使 WPAD 生效，需要具備幾個條件：

* 為使用 DHCP，伺服器必須組態為提供「site-local」選項 252（「auto-proxy-config」及字串值「http://example.com/wpad.dat」（無須引號），其中「example.com」是網頁伺服器的位址（無論點分十進位格式的 IP 位址或一個 DNS 名稱）。
* 為使用僅 DNS 模式，需要一個主機名為 WPAD 的 DNS 專案。
* 在 WPAD 位址上的主機必須可以提供網頁。
* 在這兩種情況下，網頁伺服器必須組態為提供 MIME 類型為「application/x-ns-proxy-autoconfig」的 WPAD 檔案。
* 如果使用了 DNS 方法，名為 _wpad.dat_ 的檔案必須位於 WPAD 網頁伺服器的根目錄。
* PAC 檔案的細節見代理自動組態條目。
* 在一個虛擬主機環境中組態 WPAD 伺服器時請小心使用。在使用自動代理檢測時，Internet Explorer 6 及更早版本中的 WinHTTP 和 WinINET 會傳送「Host: <IP address>」頭，在 IE7 + 和 Firefox 中則傳送「Host: wpad」頭。因此，建議將 wpad.dat 檔案代管在預設虛擬主機而非其自身下。
* Internet Explorer 版本 6.0.2900.2180.xpsp\_sp2\_rtm 會向網頁伺服器請求「wpad.da」而不是「wpad.dat」。
* 如果您使用 Windows Server 2003（及更新版本）作為您的 DNS 伺服器，您可能必須禁用 DNS 伺服器全域查詢阻止列表（_DNS Server Global Query Block List_）或修改登錄檔以編輯阻止查詢的列表。

## 安全

在極大簡化組織中瀏覽器組態的同時，WPAD 協定必須被小心使用：簡單的疏失就可能留下漏洞，攻擊者可以篡改使用者瀏覽器中顯示的內容：

* 網路內部的攻擊者可以建立一個 DHCP 伺服器，提供一個惡意 PAC 指令碼的網址。
* 如果網路是「company.co.uk」並且 http://wpad.company.co.uk/wpad.dat 檔案未提供，瀏覽器將請求 http://wpad.co.uk/wpad.dat。瀏覽器不會測定這是否仍處在公司內部。參見 http://wpad.com/ （頁面存檔備份，存於網際網路檔案館）上的例子。
* 同樣的方法已被 http://wpad.org.uk 使用。它提供一個 wpad.dat 檔案從而將使用者的所有流量重新導向到一個網際網路拍賣網站。
* 實施 DNS 劫持的 ISP 可能阻斷 WPAD 協定的 DNS 查詢，從而將使用者引導至非代理伺服器的主機。
* 泄露的 WPAD 查詢可能導致與內部網路命名方案的域名衝突。如果攻擊者註冊一個域來回答 WPAD 查詢並組態一個有效的代理，這有可能進行跨越網際網路的中間人攻擊。

通過 WPAD 檔案，攻擊者可以引導使用者的瀏覽器到他們自己的代理，攔截和修改所有 WWW 流量。儘管 2005 年對 Windows WPAD 的處理應用了一個簡單的修復，但它只解決了.com 域的問題。在 Kiwicon 的一次演講表示，世界上的許多地方仍有極其脆弱的安全漏洞，在紐西蘭為測試目的註冊的一個範例域名在幾秒內收到了來自全國各地的代理請求。幾個 wpad.tld 域名（包括 COM, NET, ORG 和 US）現在指向客戶端環回位址以幫助防範此安全漏洞，雖然還有一些名稱仍是註冊狀態（如 wpad.co.uk）。

因此，管理員應確保使用者可以信任組織中的所有 DHCP 伺服器，並且組織內的所有可能的 wpad 域都在控制之下。此外，如果沒有為組織組態 wpad 域，使用者將轉向域階層中的下一個（更高層級）wpad 站點並使用其組態。這允許能在頂級域註冊 wpad 子域名的人將自己的代理設為對所有流量或特定站點提供服務，從而施行對特定國家或區域的大範圍中間人攻擊。

除了上述「陷阱」，WPAD 方法是取得一個 JavaScript 檔案並在所有使用者瀏覽器上執行，即使使用者已禁用檢視網頁時使用的 JavaScript。

## 參考資料

## 拓展閱讀

* Automatic proxy HTTP server configuration in web browsers. Frequently Given Answers. 2004 [2016-12-23]. （原始內容存檔於 2016-08-26）.
* Jim Groves. DNS Server Global Query Block List. November 2007 [2016-12-23]. （原始內容存檔於 2015-02-16）.
* PAC File & WPAD Examples. 2015-09-18 [2022-03-25]. （原始內容存檔於 2020-12-10）.