[水]关于Web平台“隐私保护”和信息安全的一些看法
水这篇专栏的契机是差评关于chrome禁用第三方cookie那期视频。
Web更不安全吗?
Web相较于native app,其实已经有了相当多的安全机制,比如浏览器的沙箱机制,同源策略和内容安全策略,以及各大浏览器的广告/内容过滤扩展也是对安全机制很好的补充。另外,JavaScript原则上需要直接提供源代码,虽然混淆器妨碍了这一点,而HTML和CSS更是直接的明文源码。即使最近出现的,允许运行任意二进制的WebAssembly,也是受到严格的访存和API限制的。
所以,仅针对平台来说,web是比native要安全得多的。
但是,为什么实际上web更不安全呢?
因为浏览器对服务器传来的代码只是被动接受且不加修改得运行,而不是首先经过用户的审核和修改。在native,原则上是用户在选择哪些二进制可以运行在自己的机器上,而在web,是app的发布者在选择哪些代码可以运行在用户的浏览器中,而用户却只能依赖浏览器的安全机制来保护自己。
而另一方面,web是比native更方便的平台,无论就分发而言,还是就用户使用而言。用户随意点击一个链接,就可能进入另一个从没见过的web app。用户的机器上可能没有安装多少native app,但ta在一天之内却可能接触到上百个web app,而本人对此却可能毫不知情:因为浏览器从没有提醒过ta。
所以,web app相对native app,更容易来自未知来源,而且更容易在用户不知情的情况下来自未知来源。你不会随意下载二进制代码,然后随意运行,但你却可能随意浏览你不信任的网站。这是使得web更加不安全的最重要的原因。
而另一方面,甚至某一可信来源的部分代码和内容,也可以来自另一未知来源,只要这一访问并未违反同源策略,或者“未知来源”明示允许对方的访问。同样的,未知来源代码也可能在用户并不知情的情况下访问已知来源。这加重了未知来源问题,也是“第三方cookie”问题之所以存在的原因。
但是,native也并非理想。比如我们都不希望腾讯的TP运行在自己的机器上,但如果你一定要选择由腾讯分发的某些游戏,那么你可能别无选择。另外,native同样运行可信来源运行未知来源代码,而这些未知来源代码甚至不会被限制在沙箱之内。
另一方面,使得用户能在甚至不知情的情况下安全得使用未知来源的内容,这在native是几乎不可能的。而这,至少我认为,是web的一大壮举。
那么,web如何能变得更安全呢?
HTTPS可能用于缓解未知来源问题,但HTTPS所信任的来源,是用户选择信任的那些(根)CA所信任的来源,而非用户自己选择信任的来源。这带来了很多问题,比如几年前发生在中国的某起事件。
而随着ACME服务的出现,HTTPS,或者说CA,也失去了来源审核的作用,退化为了纯粹提供加密通信的机制。原则上你不应该信任作为CA的let's encrypt,但仅在PKI机制上信任它,确实能带来很多便利。
简单来说,你不信任google ads和google analytics,但你的CA信任它们,这不能在pki框架下得到解决。
当然,加密和通信是安全性的第一步,因为通过杜绝中间人攻击(但HTTPS并不能完美杜绝MITM,例子见本节第一段最后一句话),这至少保证了代码的确来自于它所声称的那个来源。
我们能采取哪些做法?
针对包含不可信内容的可信来源:内容过滤
可以通过将某些站点标记为不信任(通过系统证书存储),
拒绝某些站点的域名解析(通过自定义域名解析,这里我提一下nextDNS,但我最推荐的做法永远是在本地搭建DNS缓存服务器),
以及使用过滤器(比如ADB, ABP和uBlock Origin,uBlock Origin是这三者中最好的选择)
针对日常使用的不受信来源:user script (和user style)
有些时候我们必须日常使用那些我们拒绝信任的服务,比如qq,wechat,alipay,以及Bilibili,weibo和zhihu之类,以及google和baidu。在native平台,人们会说“不信任就不要用”,但web提供了不信任却依然可以使用的选项。
所以你知道为什么屑tx不提供web版了吗
User script相比过滤器提供了更灵活的选项。User script可以“中和”不受信代码,阻止它们的运行,或者让它们的行为不再有害。
但user script缺点是,你必须在了解app的行为之后才能针对这一app设计user script。所以user script通常来说只能用于日常使用的app。而且某些app可能对针对特定的user script做出反制,所以使用user script需要付出一定精力。
针对更广泛的不受信来源:沙箱
在临时沙箱中打开新的浏览器实例,这样可以使得广追踪器无效化,因为沙箱中追踪器无法获得你的真实画像,并且追踪id也可能会改变。
沙箱也可以阻止更加有害的行为,不过目前的web平台
另外需要额外提一下,对沙箱分配的计算,网络和存储资源应当是有限的,因为这些资源也可能是某些有害程序觊觎的对象(比如挖矿和僵尸网络)。
以及,如果你对这条建议感兴趣,建议了解一下Qubes OS。