通过读取请求标头检测 Tor 代理

信息安全 http 代理人 匿名
2021-08-23 08:15:04

我是安全领域的新手。当我试图探索更多有关 HTTP 请求和响应标头的信息时,我偶然发现了这个网站,它提供了对我们系统发送到其服务器的请求标头的详细分析。根据该网站,通过检查ViaX-Forwarded-For标头,可以断定客户端是否使用代理。当我在不使用任何代理的情况下访问该网站时,它显示这两个标题都不存在(这是预期的)。但是,当我再次访问这个网站时,这次使用Tor 浏览器,仍然没有两个标题!完全没有代理的迹象。

我对 Tor 的工作有一个非常模糊的想法,但我不确定为什么在使用 Tor 浏览器时标头无法检测到代理!任何人都可以用外行的话解释同样的原因吗?此外,如果 Tor 提供这种级别的匿名性,还有其他方法可以检测 Tor 代理吗?

4个回答

Tor 只是作为匿名透明 HTTP 代理重复请求,这意味着它不附加典型的代理标头(例如Viaor X-Forwarded-For),或以任何其他方式修改 HTTP 请求或响应(除了通过 Tor 网络“洋葱路由、加密和解密”)。

至于识别通过 Tor 网络连接的客户端,在 Web 服务器端最容易检测到此类客户端的方法是查询发布 Tor 出口节点的公共TorDNSEL 服务

TorDNSEL 是一个活跃的测试,基于 DNS 的 Tor 出口节点列表。由于 Tor 支持退出策略,网络服务的 Tor 退出列表是其 IP 地址和端口的函数。与传统的 DNSxL 不同,服务需要在其查询中提供该信息。

以前的 DNSEL 会从 Tor 的网络目录中抓取出口节点 IP 地址,但这种方法无法列出不在目录中公布其出口地址的节点。TorDNSEL 通过这些节点主动测试以提供更准确的列表。

这种 TorDNSEL 查询可以在您的 Web 应用程序中自动进行,并且可以在 Internet 上找到许多编程语言的示例代码。例如,这里有一些示例代码演示了如何在 PHP 中执行此操作。

如果你打算在你的 web 应用程序中实现这个 Tor 检查,那么我建议你在本地缓存查询结果一段时间,期望出口节点在此期间没有改变是合理的,不要不断重复相同的查询并添加一个您的回复有额外的滞后。


编辑添加:优化此 Tor 出口节点查询并避免一直使用 TorDNSEL 的另一种方法是事先进行反向 DNS 查找,并尝试将其与已知的主要 Tor 出口节点主机列表进行匹配。这实际上非常有效,因为许多主要出口节点主机永远不会改变,并且它们可以使用相同或相似的 rDNS 名称操作大量出口节点。例如,您可以尝试使用正则表达式、LIKESQL 运算符或类似方法将 rDNS 名称与您的列表匹配。一些已知的 Tor 出口节点主机(真实示例)将匹配这些名称:

tor[0-9].*
tor-exit*
*.torservers.*
*.torland.is

这是我正在使用的列表。如您所见,它远未完成,但它只是一个开始,您始终可以在检测到它们遵循易于匹配的模式时添加更多条目。由于它只是为了优化查询,它实际上并不需要完整,但每次匹配肯定会加快速度。希望这可以帮助!

X-Foreward-For 标头代理选择性地(并且有目的地)发送。如果代理试图隐藏其用户的身份,它将不会发送此标头。

Onion Network 是专门为隐藏用户身份而设计的。它永远不会泄露 IP 地址或任何其他可以显示用户身份的数据。

这里有个小提示:

在浏览关于 Proxy Servers 的维基百科文章时,我发现即使代理服务器没有使用 HTTP_VIA、HTTP_X_FORWARDED_FOR 或 HTTP_FORWARDED 等标头行,如果由客户端包含来自先前访问的 cookie,该 cookie 未使用高匿名代理服务器。

您可以使用 Firefox 资源包来检测它。您只需要了解 JavaScript 编程。

Firefox使用resource://URI 方案从内部模块和扩展调用磁盘资源。

但其中一些资源也可能包含在任何网页中并通过脚本标签执行。Mozilla 开发人员并未将资源视为指纹矢量,尽管其中一些资源可以揭示用户不想透露的内容。例如,内置首选项文件的差异清楚地表明您使用的是 Windows、Linux 还是 Mac,即使您使用 Tor 也是如此。

在 Tor 浏览器中试试这个 URL:https ://www.browserleaks.com/firefox