聲明:本文來自微信公眾號(hào)“差評(píng)X.PIN”,作者:小柳,編輯:米羅 & 面線,授權(quán)站長(zhǎng)之家轉(zhuǎn)載發(fā)布。
提起隱私泄露這事兒,托尼其實(shí)早就麻了。。。平時(shí)網(wǎng)購(gòu)、換手機(jī)號(hào)、注冊(cè)各種賬號(hào)之類的都會(huì)咔咔泄露,根本就防不住。
但托尼真是沒想到,瀏覽器里會(huì)有一個(gè)看起來完全人畜無害的功能,也在偷偷泄露我們的個(gè)人隱私,而且這一泄露就23年。。。
這個(gè)功能我保證大家都用過。不知道各位差友們有沒有這種印象,初中上微機(jī)課那會(huì)兒,當(dāng)同學(xué)們滿懷激動(dòng)的心情打開4399,一眼就能看出上一波上課的玩了什么游戲 —— 就看游戲的鏈接有沒有變紫,鏈接變紫了,說明這個(gè)頁面前不久剛打開過。
不光是4399啊,這個(gè)貼心的小功能其實(shí)廣泛存在于各大網(wǎng)頁里,就比方說我在搜索引擎里打開了差評(píng)的官網(wǎng),回退后就能發(fā)現(xiàn)鏈接的顏色變成了紫色,本質(zhì)上是提醒你:“ 你之前打開過這個(gè)網(wǎng)頁了哦!” 能讓你瀏覽信息的效率變得更高。
對(duì),別懷疑,泄露隱私的就是這么個(gè)不起眼的小功能。
在聊這玩意為啥能泄露隱私之前,咱們不妨先來扒一扒這個(gè)功能是怎么做到讓瀏覽過的網(wǎng)頁鏈接變色的。
我們知道,一個(gè)網(wǎng)頁要想好看,排版必須得合理,這就要用到一個(gè)叫 “ CSS 語言 ” 的東西了。它能定義網(wǎng)頁的字體、顏色、間距、對(duì)齊方式這些視覺元素,改善用戶的視覺體驗(yàn)。
這個(gè)鏈接變紫的操作,就是這個(gè) “ CSS ” 根據(jù)瀏覽器歷史文件,把瀏覽過的鏈接標(biāo)記為 “ :visited ”,然后再把顏色設(shè)置為 “ purple ”,代碼大概是這樣。
這樣一來,瀏覽過的網(wǎng)頁鏈接都會(huì)被 CSS 打上標(biāo)簽、變更樣式,跟沒瀏覽過的網(wǎng)頁區(qū)分開來。
然后問題就出現(xiàn)了:因?yàn)檫@個(gè) “ :visited ” 是一個(gè)全局列表,假設(shè)你在 “ 差評(píng) ” 網(wǎng)站上訪問了 “ 火鍋 ” ,那 “ 火鍋 ” 的鏈接會(huì)變紫色對(duì)吧;但緊接著,如果你訪問了一個(gè)名叫 “ 好評(píng) ” 的山寨網(wǎng)站,里頭也有一個(gè)同樣的 “ 火鍋 ” 鏈接,這個(gè)鏈接也將會(huì)是紫色。
這樣一來好評(píng)也知道你擼過火鍋了。
瀏覽器只認(rèn)歷史記錄里的鏈接,壓根兒不管你是在哪兒看過的這個(gè)鏈接。
那么如果有一個(gè)惡意網(wǎng)站,里邊內(nèi)嵌了很多很多鏈接,那么理論上網(wǎng)站的管理者只需要利用這個(gè)漏洞,讀取你頁面上的 CSS 信息,就能知道你之前瀏覽過哪些鏈接。
我知道這會(huì)兒肯定有人會(huì)說了,不就是個(gè)瀏覽歷史嗎,泄露了就泄露了唄,對(duì)面難不成還能拿這個(gè)賣錢?
還。。。真能賣點(diǎn)錢,對(duì)于某些領(lǐng)域來說,這種信息還是挺有價(jià)值的。
依靠這個(gè)漏洞,老板能看到自己的員工有沒有偷偷摸魚刷 Boss 直聘、賣車的銷售能看到你都考慮過哪些競(jìng)品、甚至哪兒不舒服搜過什么癥狀,賣保健品的都能給你精準(zhǔn)推送一波。
單說這些其實(shí)還好,最多就是煩人一點(diǎn),但這種信息要是收集的多了,就能跟特定的身份聯(lián)系起來,識(shí)別出你是誰。
就比如說最早用來讀取用戶網(wǎng)頁上 CSS 信息的辦法,是一個(gè)叫做 “ getComputedStyle() ” 的 JavaScript 函數(shù),每分鐘可以測(cè)試幾十萬個(gè)鏈接。按照這樣的速度,可以快速、大量破解用戶的歷史記錄,這種體量的數(shù)據(jù)一旦暴露,這就真是實(shí)名制上網(wǎng)了。
最令托尼擔(dān)憂的是托尼在刷相關(guān)事例的時(shí)候還發(fā)現(xiàn)了一個(gè)已經(jīng)掛了很久的網(wǎng)站,宣稱讓你的兄弟打開這個(gè)頁面上的鏈接,就能看到你兄弟曾經(jīng)看過什么淘氣頁面。
還好已經(jīng)掛了。
不知道屏幕前多少差友捏了一把冷汗,反正我是沒有。
而這么危險(xiǎn)淺顯的一個(gè)漏洞,最早在2002年就被一個(gè)名叫 David Baron 的開發(fā)者發(fā)現(xiàn)并上傳,迄今已經(jīng)過去23年之久了。。。
它為啥能活這么久呢?中間就沒有人想去解決這個(gè)問題嗎?
有的朋友,有的,但效果都不理想。
就比如說針對(duì)上面提到的那個(gè) “ getComputedStyle() ” 函數(shù),有些瀏覽器就進(jìn)化了,會(huì)對(duì)網(wǎng)站 “ 撒謊 ” ,將所有鏈接都看作是未訪問過的。
后來也有一些對(duì)網(wǎng)站可用樣式做限制的方案,直接把紫色鏈接的顯示禁止掉了。
但這些要么影響性能和兼容性,要么總是被黑客找辦法繞了過去。。。大家就這樣縫縫補(bǔ)補(bǔ)了好多年,也只能對(duì)這個(gè)漏洞起一些緩解的作用,沒法徹底解決。
最后 Chrome 團(tuán)隊(duì)都擺爛了,直接把用戶反饋上來的相關(guān)問題標(biāo)為 “ 無法解決 ” 。
不過這場(chǎng)鬧劇也許終于要結(jié)束了。根據(jù) Google 軟件工程師 Kyra Seevers 的說法,這個(gè)漏洞已經(jīng)在今年4月份 Chrome136版本中得到解決了。
那這回 Google 是怎么解決掉這個(gè)陳年積案的呢?托尼研究了一下 Kyra Seevers 發(fā)的這篇博客文章,發(fā)現(xiàn)他們給瀏覽記錄整了個(gè)分區(qū)。
這個(gè)分區(qū)分為三個(gè)部分:鏈接網(wǎng)址,頂級(jí)網(wǎng)站和框架源,瀏覽器在記錄瀏覽歷史的時(shí)候會(huì)同時(shí)記錄下這三個(gè)部分的信息。我們先不討論這個(gè) “ 框架源 ” ,還是用之前差評(píng)和火鍋的例子給大家捋捋。
大家在 “ 差評(píng) ” ( 頂級(jí)網(wǎng)站 ) 上打開 “ 火鍋 ” ( 連接網(wǎng)址 ),火鍋的鏈接會(huì)變紫;而這回山寨 “ 好評(píng) ” 上的 “ 火鍋 ” 鏈接就不會(huì)跟著變紫了,因?yàn)樗鼈冇胁灰粯拥?span id="oo9glhi" class="spamTxt">頂級(jí)網(wǎng)站。
而這個(gè) “ 框架源 ” 則是為了兼顧更多的場(chǎng)景,因?yàn)橛械臅r(shí)候網(wǎng)站會(huì)內(nèi)嵌一個(gè)其他網(wǎng)站的頁面,里邊也可能會(huì)有鏈接,這就也得做一個(gè)區(qū)分。
比如我們?cè)?“ 差評(píng) ” 內(nèi)嵌的 “ 高德地圖 ” 頁面( 框架源 )里點(diǎn)擊了 “ 火鍋 ” 鏈接,它會(huì)變紫;但 “ 差評(píng) ” 內(nèi)嵌的 “ 百度地圖 ” 頁面上同一個(gè) “ 火鍋 ” 鏈接就不會(huì)變紫,因?yàn)樗鼈兊目蚣茉床煌?/p>
當(dāng)這個(gè)分區(qū)啟用了之后,這個(gè) “ :visited ” 歷史記錄就不再是所有網(wǎng)站都能查詢的全局列表了,而會(huì)根據(jù)這三個(gè)分區(qū)去判斷你到底是不是頭一回兒訪問這個(gè)鏈接,中間只要有一個(gè)分區(qū)對(duì)不上,CSS 就不會(huì)給鏈接標(biāo)記 “ :visited ”,顏色樣式也不會(huì)有變化。
好兄弟再不會(huì)知道你看了什么淘氣頁面了!如果一切順利,等到月底 Chrome 瀏覽器更新136版本,這個(gè)長(zhǎng)達(dá)23年,通過鏈接變色泄露隱私的抓馬漏洞終于要落下帷幕了。
所以托尼的朋友們從此可以高枕無憂了嗎?還不行,相關(guān)隱私泄露的風(fēng)險(xiǎn)依舊存在,而且歲數(shù)這么大的漏洞也屢見不鮮。。。
這次托尼在查相關(guān)資料的時(shí)候,發(fā)現(xiàn)了一篇2000年的論文,論文中討論了一種針對(duì)網(wǎng)絡(luò)隱私的時(shí)序攻擊方式,大概的原理是網(wǎng)站通過你頁面加載的時(shí)間,判斷你之前有沒有對(duì)頁面內(nèi)容進(jìn)行緩存,進(jìn)而推測(cè)你之前是否訪問過這個(gè)頁面。
不得不說,人類為了達(dá)成某種目的,真的是什么歪門邪道都能想得出來。。。。
而現(xiàn)如今,這個(gè)25歲高齡的漏洞也沒有被徹底解決,時(shí)序攻擊的依據(jù)也從緩存加載時(shí)間進(jìn)化到渲染矢量圖的時(shí)間,道高一尺魔高一丈。
這事兒去年還被拿出來討論過
除了這些攻擊, Google 在這次還在 Github 關(guān)于瀏覽器歷史分區(qū)技術(shù)的解釋頁面,貼心為我們總結(jié)了一批專門攻擊瀏覽器歷史記錄的漏洞,看著長(zhǎng)長(zhǎng)這一條,托尼說不焦慮是假的。
聊了這么多,托尼知道很多人仍然對(duì)于 “ 瀏覽器歷史記錄 ” 這種程度的隱私泄露不以為然。
可托尼想說,現(xiàn)在的情況跟20幾年前已經(jīng)完全不同了,互聯(lián)網(wǎng)已經(jīng)成了大家生活中不可或缺的一部分,網(wǎng)上的信息也承載著越來越重的意義,而且任何隱私都本不該被泄露。
見微知著,都2025年了,如果連一個(gè)瀏覽器歷史記錄都管不好的話,怎么能讓大家放心在網(wǎng)上沖浪呢?
(舉報(bào))