imn1
2019-11-09 17:46:27 +08:00
一般 ad block 有几种方式
1.匹配域名,拦截或劫持 DNS 请求(发送前或接收后处理)
2.匹配 URL,拦截或劫持请求(发送前处理)
3.匹配 dom 规则,劫持 dom 的解析(接收后处理)
1/2 可以在浏览器外完成,前提是 dns/url 都可以获
简单说,请求经过这个第三方拦截工具且没有加密
3 基本只能浏览器内完成,并且各家浏览器都没有开放修改 content 的 API,因为这样极不安全
三方插件随便可以改 content 是不能接受的,普通人无法判断这种修改是善意还是恶意
但额外加载一个 css,对部分 dom 隐藏,则是允许的
例如,一般 http 经过 privoxy,是可以做上面 1/2/3 的,甚至可以用正则替换内容文字,但 https(ssl)就不行了
你需要的是哪种?
3 是很难维护的,网站过亿,不同的页面 dom 解析不同,规则条数是天文数字
即使有相对完整的,条数太多,你的浏览器加载会很惨
1 和 2 很容易出现“误杀”,利益使善意恶意难以区分
另外,保护隐私更重要的,不是拦截,而是去除指纹
主要方法是
a. cookies 不能保持长久
b. 随机的浏览器数据,例如 ip/UA 等等,实现干扰,让服务器端没办法把 timeline 和 token 对接
firefox container 在这方面目前做得算是最好的,相对来说
但是,但是——
一旦需要登录的网站,上面 a/b 两点都没有用
而不需要登录的网站,在服务器一些技术手段下,也会出现浏览困难,知乎,google,v2, medium?(国外的,忘了怎么拼)……
例如,google 搜索,如果服务器怀疑客户端是同一台机器,但指纹不同,就会随机出现验证码,这是很烦的,你就不得不妥协提供浏览器指纹给他