【基于GeoIP的代理分流模式的安全隐患】
基于GeoIP的代理分流模式存在极大的安全隐患。
国内直连,国外走代理,听起来好像不错,但代价就是:任何一个国内网站,只要想做,都可以知道你有没有挂梯子,你国内IP、梯子IP是什么。
下面是对该问题详细讲解。
据我所知,现在很多的代理软件都采取默认全走代理,绕过中国IP、中国域名、局域网IP这样的分流策略。但这种白名单式的分流模式是存在极大的安全隐患的。
如图一所示,如果一个国内网站想知道访问者有没有使用代理,那它可以采取这样的探测策略。在大量正常的第三方请求中,夹杂一些非中国IP、非中国域名的请求。
如果访问者使用的是采取上面所说的白名单分流模式的代理,那么这些非中国IP、非中国域名的探测请求就会被分流至国外代理服务器进行访问。
这样一来,网站便可以知道该访问者是否使用了代理,该访问者国内IP是什么,该访问者墙外的代理IP是什么。
感兴趣的读者可以手动模拟一下上述的过程。
一切开始之前,先访问一下 http://myip.ipip.net/ ,获得自己当前IP。
然后在国内网站,比如说 https://www.baidu.com/ 、https://www.bilibili.com/ ,运行下面的 javascript 代码。
确认一下,控制台输出的IP地址是否与上一步获得的IP一致。
```
(async ()=>{console.log((await (await fetch("https://www.cloudflare.com/cdn-cgi/trace", {"mode":"cors"})).text()).split('\n').filter((x)=>x.startsWith('ip=')).map((x)=>x.replace('ip=','')).join(''));})()
```
再进一步讲,黑名单分流模式也存在同样的问题,通过精心选择的探测域名同样可以达到探测的目的。
为了安全考量,也许根本就不应该进行分流,要么全部直连,要么全走代理。
使用两个浏览器,一个全部直连,一个全走代理,国内网站使用直连浏览器访问,国外网站使用代理浏览器访问。可以在一定程度上缓解这个问题。
另外,从这里也可以看出屏蔽第三方请求的重要性。
如果使用 uBlock Origin 插件的嘟友,可以参考wiki,将屏蔽模式设为 Hard 模式。
https://github.com/gorhill/uBlock/wiki/Blocking-mode:-hard-mode