如何防止网站检测到 Fiddler

How to prevent a website from detecting Fiddler

问题标题可能没有涵盖整个主题,因为我做了很多研究并发现了一些奇怪的事情。

所以首先,我要实现的是某种可以代表用户工作的网站客户端(不做任何违法的事情,只是优化用户的一些工作流程)。我已经为许多网站完成了此操作,并且效果很好。但是,对于当前版本,存在一个问题。

通常,如果我遇到验证码,我会打开一个嵌入式 Chrome window 供用户通过。但是,对于我正在谈论的网站,它没有帮助,因为验证码没有显示在浏览器中,而是在我模仿请求浏览器准确发送时发送给我。

所以我尝试调查 Chrome 和我的应用程序使用 Fiddler 发送的请求之间的区别。 但是,如果我启用 Fiddler,即使是真正的 Chrome 发送的请求也会面临相同的验证码。

我在 Chrome 中禁用了 HTTP/2、SPDY 和 IPv6,因为我认为这可能是不同之处。它没有帮助。我已经尝试使用 Chrome 开发工具比较 Chrome 发送的请求 - 没有区别,它们都使用 HTTP/1.1,两者具有完全相同的 headers,完全相同的 cookie(或没有 cookie,没有区别)。但是每当我启用 Fiddler - 网站都会用验证码响应。

这是我第一次遇到这样的事情,我几乎准备好用头撞墙了,因为我看不到任何可能的方式让网站了解请求正在被代理由 Fiddler 提供,因为它没有添加任何自定义 headers 或其他内容。

除非该网站以某种方式检测到正在设置 HTTPS 连接的确切方式,这听起来很疯狂......这应该是不可能的。

正在寻找有关如何进一步调试的建议。

更新:

我没有找到解决方案,也不了解相关网站如何检测来自 Chrome 的直接连接,但设法找到了解决方法:

我正在使用我的代码从网站接收到的验证码获取页面,并将 CEF 接收到的实际页面动态替换为该验证码页面,从而允许用户通过它。

因为它没有回答原始问题,所以我不会将其作为答案发布,并将让这个问题悬而未决。

网站本身通常检测不到任何东西。验证码通常由反dos保护服务提供商如Cloudflare提供。

根据我的经验,此类系统通过 JavaScript(获取使用的 Web 浏览器名称、版本和使用的 OS)将浏览器指纹识别系统与 HTTPS (TLS) 级别的检测相结合:

在 TLS 协议握手中,客户端发送一条 CLIENT_HELLLO 消息,其中包含有关受支持的 TLS 版本和密码套件的信息,以及某些 TLS 扩展中的其他附加数据(例如,如果它支持 HTTP/2).

这次握手可以再次被指纹识别。例如,如果您现在通过 Fiddler 使用 Firefox,则浏览器指纹显示 Firefox,但 Fiddler 是一个 .Net 应用程序,因此指纹表明使用了 Windows schannel TLS 库。两个指纹不匹配,因此保护系统将重定向到验证码对话框。