在MDN的代理示例中,我看到他们使用127.0.0.1:65535
作为无效网址 (链接到来源(:
const allow = "DIRECT";
const deny = "PROXY 127.0.0.1:65535";
...
function FindProxyForURL(url, host) {
if (blockedHosts.indexOf(host) != -1) {
browser.runtime.sendMessage(`Proxy-blocker: blocked ${url}`);
return deny;
}
return allow;
}
端口 65535 有什么特别之处吗?假设没有进程会侦听该端口是否安全?
在代理自动配置 (PAC( 文件的文档中,我没有看到阻止请求的直接方法。例如,有DIRECT
、PROXY
、SOCKS
但没有REJECT
或DENY
。我认为PROXY 127.0.0.1:65535
是拒绝请求的官方方式。
假设向127.0.0.1:65535
发送请求会拒绝它们是否安全?
127.0.0.1:65535 发送请求会拒绝它们是否安全?
不,这不安全。
它只是本地计算机上的最后一个端口。我完全能够在没有任何特殊权限的情况下打开它并向它发送数据。
他们只是将其用作有效地址,但不太可能使用的端口。不是最好的解决方案,但对于示例代码来说可能足够好。
没有特殊规定,65535 是代理的有效端口。如果您碰巧在那里运行有效的代理,则该示例将无法阻止。
通常,"9"用作"丢弃服务"的默认端口。 65535 没什么特别的,只是最大可能的端口号。我假设他们使用它,因为他们相信没有人会听端口。
但是,这种方法并不安全,因为 1( 任何人都可以编写侦听端口 65535 的服务器套接字;2( 端口号可能作为临时端口随机分配给客户端。
除了其他答案之外,丢弃协议(端口 9(最接近于/dev/null
。引用维基百科文章:
丢弃协议是 Unix 文件系统节点的 TCP/UDP 等价物
/dev/null
。此类服务保证接收发送给它的内容,并可用于调试需要保证接收发送的有效负载的 TCP 和/或 UDP 代码。在各种路由器上,默认情况下,用于丢弃协议的此 TCP 或 UDP 端口 9(或用于中继 ICMP 数据报的回显协议的端口 7(也用作代理,用于将 LAN 唤醒 (WOL( 幻数据包从 Internet 中继到本地网络上的主机,以便远程唤醒它们(这些主机还必须将其网络适配器配置为接受 WOL 数据报,并且路由器必须启用此代理设置, 也可能在其嵌入式防火墙中配置转发规则以在互联网端打开这些端口(。
此外,通过代理 API 阻止请求也不是典型用法。相反,webRequest API 更适合阻止请求。有讨论来改变这个例子。
我认为这解释了为什么在 PAC 事实上的标准中没有明确支持拒绝请求,以及为什么使用将流量重定向到未使用的端口或域的解决方法。