网站正在检测本地代理(Fiddler 捕获获取 HTTP 429)

Website is detecting local proxy (Fiddler capture gets HTTP 429)

我经常发现自己调试网站或分析引擎盖下发生的事情。 Fiddler 在这方面为我提供了非常好的服务,而且我经常拥有它 运行.

我刚刚注意到一个非常奇怪的问题,当我在 Fiddler 处于 运行 的情况下访问特定站点时,我收到了 429 响应。如果我将其切换为不捕获流量,该网站就可以正常工作。我重新打开它的那一刻,又是 429。我已经尝试自己制作请求以查看是否可以重现 200,但无济于事。

我对此很感兴趣,因为该站点似乎检测到 Fiddler 是 运行,但我无法完全理解它。我想网站可能会使用 JS 进行检查,也许 WebSocket worker 会检测到这些东西,但是初始请求如何通过 Fiddler 拦截流量立即失败并返回 429?

编辑:阅读 表明 Fiddler 提供的 TLS 握手证书可能是这里的关键。

编辑 #2:阅读它,Fiddler 似乎无法生成 TLS 1.3 证书,所以这可能是什么,但是根据 ssllabs.com/ssltest ,该站点支持 TLS 1.0,TLS 1.1 和 TLS 1.3

没有 TLS 1.3 证书。 SSL/TLS 中的证书与使用的 TLS 版本无关。只有使用的密钥对算法(例如 RSA、ECC、)可以限制可以使用的 TLS 密码。但这只会影响客户端和 Fiddler 之间的连接,而不影响与服务器的连接(拒绝访问)。

关于支持的 TLS 版本 Fiddler 是一个 Windows/.Net 应用程序,因此它继承了 Windows 的 TLS 功能。根据 SO 的一些帖子,您可能必须 。也不要忘记在 Fiddler HTTPS 选项中启用 tls1.3。

但是如果服务器端确实使用了 SSL/TLS 指纹识别,我怀疑这是否足以将指纹更改为可接受的内容。通常密码套件的完整列表以及应用层协议协商 (ALPN) 等可选扩展也会包含在指纹中,我认为您无法在不更改 Fiddler 代码的情况下在 Fiddler 中启用此类扩展。

如果你想检查 Fiddler 和你的网络浏览器的 TLS 指纹,你可以使用 Wireshark。捕获 TLS 握手流量,然后应用 运行 时间过滤器 ssl.handshake.type == 1(仅显示 CLIENT_HELLO)。展开条目 Transport Layer Security -> TLSv1? Record Layer... -> Handshake Protocol: Client Hello 并向下滚动。

你会发现两行以 JA3 开头(这是一种常见的 TLS 指纹识别算法的名称),如下所示:

[JA3 Fullstring: 771,4865-4867-4866-49195-49199-52393-52392-49196-49200-49162-49161-49171-49172-156-157-47-53,0-23-65281-10-11-16-5-34-51-43-13-45-28-41,29-23-24-25-256-257,0]
[JA3: c279b0189edb9269da7bc43dea5e0c36]

使用 Fullstring 您可以比较 CLIENT_HELLO 不同客户端的消息。