網路代理自動發現協議

網路代理自動發現協議（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:」頭，在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.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。