网络代理自动发现协议

网络代理自动发现协议（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。