WebRTC 泄漏是如何发生的
WebRTC 让浏览器应用能够交换音频、视频和数据。建立连接时,交互式连接建立(ICE)会从本地网络接口、STUN 探测结果和 TURN 中继收集可用的网络路径。网页可以创建仅传输数据的连接,因此即使没有摄像头或麦克风权限,也能收集候选地址。
网页的 HTTP 流量可能经过代理服务器,而 WebRTC 的 UDP 流量仍会直接发送。如果 JavaScript 获取的候选地址包含运营商侧公网地址,而不是代理出口地址,就说明流量没有按预期路径传输,发生了泄漏。
| 候选地址 | 来源 | 网站可能看到的内容 |
|---|---|---|
| 主机 | 设备网络接口 | 私有地址或 mDNS 名称 |
| 服务器反射 | STUN 服务器 | 直连路径使用的公网地址 |
| 中继 | TURN 服务器 | TURN 中继地址 |
现代浏览器通常会用临时 mDNS 名称替换本地私有地址。这可以减少本地网络信息暴露,但不能保证公网 IPv4 或 IPv6 地址始终隐藏。
为什么使用代理时需要注意 WebRTC 泄漏
代理会更改经其转发的流量所显示的地址,但不会自动转发浏览器建立的所有连接。
网站可能会对比 HTTPS 来源地址和 WebRTC 候选地址。如果两者不一致,例如代理出口位于一个国家,而 WebRTC 地址位于另一个国家,就可能成为浏览器指纹识别和机器人检测的判断依据。这不能证明访问来自自动化程序,但轮换代理 IP 也无法解决这种地址不一致的问题。
禁用 WebRTC 也会改变浏览器的功能特征,并导致浏览器通话、屏幕共享和点对点数据通道无法使用。
如何防止 WebRTC 泄漏
- 对比地址。 在同一浏览器环境中,对比 HTTP 流量显示的代理出口地址和收集到的 ICE 候选地址。IPv4 和 IPv6 都要检查,确认是否出现陌生的公网地址。
- 控制直连流量。 使用浏览器策略阻止不经过代理的 UDP 流量,或配置全隧道 VPN,让 UDP 和 IPv6 流量也通过 VPN。
- 不需要 WebRTC 时将其禁用。 Firefox 可在
about:config中设置media.peerconnection.enabled。受管理的浏览器可能提供同类策略。 - 更改后重新测试。 浏览器更新、扩展程序和浏览器环境设置都可能改变候选地址的处理方式。
对于自动化测试或数据采集,修复泄漏并不代表可以忽视网站条款、访问规则和限速要求。
常见问题
使用 HTTP 代理时,WebRTC 会泄漏我的 IP 吗?
会。常规 HTTP 代理只转发浏览器的网页请求,不会转发 WebRTC 的直连 UDP 流量。因此,如果不限制 WebRTC 的网络路径,浏览器可能会暴露另一个公网地址。
WebRTC 泄漏需要摄像头权限吗?
不需要。网页可以通过仅传输数据的 WebRTC 连接收集 ICE 候选地址,无需申请摄像头或麦克风权限。
使用代理时应该禁用 WebRTC 吗?
这取决于具体工作流程。如果不需要 WebRTC 功能,可以将其禁用;如果应用需要通话、屏幕共享或点对点数据传输,则应控制 WebRTC 的网络路径。