[水]關(guān)于Web平臺“隱私保護(hù)”和信息安全的一些看法
水這篇專欄的契機(jī)是差評關(guān)于chrome禁用第三方cookie那期視頻。
Web更不安全嗎?
Web相較于native app,其實已經(jīng)有了相當(dāng)多的安全機(jī)制,比如瀏覽器的沙箱機(jī)制,同源策略和內(nèi)容安全策略,以及各大瀏覽器的廣告/內(nèi)容過濾擴(kuò)展也是對安全機(jī)制很好的補(bǔ)充。另外,JavaScript原則上需要直接提供源代碼,雖然混淆器妨礙了這一點(diǎn),而HTML和CSS更是直接的明文源碼。即使最近出現(xiàn)的,允許運(yùn)行任意二進(jìn)制的WebAssembly,也是受到嚴(yán)格的訪存和API限制的。
所以,僅針對平臺來說,web是比native要安全得多的。
但是,為什么實際上web更不安全呢?
因為瀏覽器對服務(wù)器傳來的代碼只是被動接受且不加修改得運(yùn)行,而不是首先經(jīng)過用戶的審核和修改。在native,原則上是用戶在選擇哪些二進(jìn)制可以運(yùn)行在自己的機(jī)器上,而在web,是app的發(fā)布者在選擇哪些代碼可以運(yùn)行在用戶的瀏覽器中,而用戶卻只能依賴瀏覽器的安全機(jī)制來保護(hù)自己。
而另一方面,web是比native更方便的平臺,無論就分發(fā)而言,還是就用戶使用而言。用戶隨意點(diǎn)擊一個鏈接,就可能進(jìn)入另一個從沒見過的web app。用戶的機(jī)器上可能沒有安裝多少native app,但ta在一天之內(nèi)卻可能接觸到上百個web app,而本人對此卻可能毫不知情:因為瀏覽器從沒有提醒過ta。
所以,web app相對native app,更容易來自未知來源,而且更容易在用戶不知情的情況下來自未知來源。你不會隨意下載二進(jìn)制代碼,然后隨意運(yùn)行,但你卻可能隨意瀏覽你不信任的網(wǎng)站。這是使得web更加不安全的最重要的原因。
而另一方面,甚至某一可信來源的部分代碼和內(nèi)容,也可以來自另一未知來源,只要這一訪問并未違反同源策略,或者“未知來源”明示允許對方的訪問。同樣的,未知來源代碼也可能在用戶并不知情的情況下訪問已知來源。這加重了未知來源問題,也是“第三方cookie”問題之所以存在的原因。
但是,native也并非理想。比如我們都不希望騰訊的TP運(yùn)行在自己的機(jī)器上,但如果你一定要選擇由騰訊分發(fā)的某些游戲,那么你可能別無選擇。另外,native同樣運(yùn)行可信來源運(yùn)行未知來源代碼,而這些未知來源代碼甚至不會被限制在沙箱之內(nèi)。
另一方面,使得用戶能在甚至不知情的情況下安全得使用未知來源的內(nèi)容,這在native是幾乎不可能的。而這,至少我認(rèn)為,是web的一大壯舉。
那么,web如何能變得更安全呢?
HTTPS可能用于緩解未知來源問題,但HTTPS所信任的來源,是用戶選擇信任的那些(根)CA所信任的來源,而非用戶自己選擇信任的來源。這帶來了很多問題,比如幾年前發(fā)生在中國的某起事件。
而隨著ACME服務(wù)的出現(xiàn),HTTPS,或者說CA,也失去了來源審核的作用,退化為了純粹提供加密通信的機(jī)制。原則上你不應(yīng)該信任作為CA的let's encrypt,但僅在PKI機(jī)制上信任它,確實能帶來很多便利。
簡單來說,你不信任google ads和google?analytics,但你的CA信任它們,這不能在pki框架下得到解決。
當(dāng)然,加密和通信是安全性的第一步,因為通過杜絕中間人攻擊(但HTTPS并不能完美杜絕MITM,例子見本節(jié)第一段最后一句話),這至少保證了代碼的確來自于它所聲稱的那個來源。
我們能采取哪些做法?
針對包含不可信內(nèi)容的可信來源:內(nèi)容過濾
可以通過將某些站點(diǎn)標(biāo)記為不信任(通過系統(tǒng)證書存儲),
拒絕某些站點(diǎn)的域名解析(通過自定義域名解析,這里我提一下nextDNS,但我最推薦的做法永遠(yuǎn)是在本地搭建DNS緩存服務(wù)器),
以及使用過濾器(比如ADB, ABP和uBlock?Origin,uBlock Origin是這三者中最好的選擇)
針對日常使用的不受信來源:user script (和user style)
有些時候我們必須日常使用那些我們拒絕信任的服務(wù),比如qq,wechat,alipay,以及Bilibili,weibo和zhihu之類,以及google和baidu。在native平臺,人們會說“不信任就不要用”,但web提供了不信任卻依然可以使用的選項。
所以你知道為什么屑tx不提供web版了嗎
User script相比過濾器提供了更靈活的選項。User script可以“中和”不受信代碼,阻止它們的運(yùn)行,或者讓它們的行為不再有害。
但user script缺點(diǎn)是,你必須在了解app的行為之后才能針對這一app設(shè)計user script。所以user script通常來說只能用于日常使用的app。而且某些app可能對針對特定的user script做出反制,所以使用user script需要付出一定精力。
針對更廣泛的不受信來源:沙箱
在臨時沙箱中打開新的瀏覽器實例,這樣可以使得廣追蹤器無效化,因為沙箱中追蹤器無法獲得你的真實畫像,并且追蹤id也可能會改變。
沙箱也可以阻止更加有害的行為,不過目前的web平臺
另外需要額外提一下,對沙箱分配的計算,網(wǎng)絡(luò)和存儲資源應(yīng)當(dāng)是有限的,因為這些資源也可能是某些有害程序覬覦的對象(比如挖礦和僵尸網(wǎng)絡(luò))。
以及,如果你對這條建議感興趣,建議了解一下Qubes OS。