不用Cookie的“Cookie”技術(shù)
有另外一種比較隱蔽的用戶追蹤技術(shù),不使用cookie或者Javascript。很多網(wǎng)站已經(jīng)在用了,但知道的人不多。本文就來介紹一下這種技術(shù)是如何追蹤用戶,用戶又該如何避免追蹤。
這種技術(shù)不依賴于:
- Cookies
- Javascript
- LocalStorage/SessionStorage/GlobalStorage
- Flash, Java或插件
- 你的IP地址或者User Agent頭
- Panopticlick
相反,它使用另外一種存儲方式,而這種存儲即使瀏覽器關(guān)閉仍然能夠存在,那就是瀏覽器緩存。 即使你完全禁用了cookie和Javascript,甚至使用VPN服務(wù),這種技術(shù)仍然能夠跟蹤到你。
示例
到這個鏈接(http://lucb1e.com/rp/cookielesscookies/ )上提交一些數(shù)據(jù),然后關(guān)閉瀏覽器,然后再打開,看看數(shù)據(jù)是不是仍然在那里?
看一下你的Cookie里面的有沒有東西?沒有的吧,這些都在我們幾乎沒有察覺到的一個假的圖片校驗。看一下上面那個眼睛,哈哈,那是我們的追蹤者。
它如何工作?
下圖是一個大致描述
圖像中的ETag是一種圖像校驗方式,當(dāng)圖像發(fā)生變化的時候,ETag也會隨之發(fā)生變化。因此,瀏覽器會拿著圖片和ETag去服務(wù)器進行校驗,讓服務(wù)器來應(yīng)答這張圖片是否發(fā)生改變,如果沒有的話,這張圖片就直接從瀏覽器緩存中命中返回,無需再去服務(wù)器重新拉取圖片了。
細心的讀者可能已經(jīng)大概知道這個是如何可以實現(xiàn)追蹤的:瀏覽器把之前的ETag發(fā)回到服務(wù)器就OK了。不過,通過這個ETag貌似能產(chǎn)生好多好多Cookie,不是嗎?于是,服務(wù)器可以給每個瀏覽器一個唯一的ETag,再次收到這個ETag的時候,就能知道是你了。
Demo中的一些技術(shù)細節(jié)和缺陷
Demo為了能夠不借助于Javascript,我不得不找出一些信息對你來說是唯一的,除了那個ETag。圖片是在頁面加載后加載的,不過只有圖 片里面有ETag。我是如何將時間信息顯示出來呢? 我確實做不用Javascript動態(tài)更新數(shù)據(jù),而這Demo就是要證明不用依賴Javascript。
一些小bug:
- 所有你看到的信息都是上一次的。需要按F5才能刷出最新的。
- 當(dāng)你訪問頁面的時候不攜帶ETag (比如隱身模式),會話就會被清空。 或者說,你刷新頁面的時候,數(shù)據(jù)就會消失。
我沒有看到這種技術(shù)的比較簡單的解決方案。當(dāng)然有些東西可以做一下,可能其他網(wǎng)站不會用,不過我就是想讓代碼簡單實用就行。
請注意,當(dāng)你確實想去追蹤某個人,你又不打算告訴用戶他們正在被追蹤,你這些bug是不存在的!
源代碼
哪個程序沒有源代碼? 噢,好像是微軟的Windows。
https://github.com/lucb1e/cookielesscookies
如何避免追蹤?
如果你想更安全一些, 我強烈建議你開啟隱身模式,使用HTTPS。只要這樣開一下,就能防止BREACH (最新的https攻擊),禁止了cookie跟蹤,也消除本文講到的緩存跟蹤的問題。用網(wǎng)銀的時候,我會使用隱身模式。在Firefox(IE應(yīng)該也 是)按Ctrl + Shift + P,在Chrome中按Ctrl + Shift + N。
除此之外,要看你對于隱私安全的潔癖程度了。
目前,我沒有簡單完美的辦法,因為緩存跟蹤幾乎是無法察覺的,但同時緩存本身很有用,能夠節(jié)省時間和金錢。網(wǎng)站將消耗更少的帶寬(你仔細想想,到底 是誰會為這些流量買單),你的網(wǎng)頁加載速度更快,尤其是在移動設(shè)備上,將會有很大的區(qū)別,如果你沒有一個無限流量的套餐的話,如果你在網(wǎng)速很慢的地方,緩 存的效果就更加明顯了。
聽了這些,如果你還是不放心,那么完全禁用緩存吧。沒有了存儲性狀態(tài)或者信息,任何追蹤都不會發(fā)生,就是每次都要重新加載,速度會慢一些,并且我個人并不認為值得這樣做。
Firefox的插件Self-Destructing Cookies有這樣的功能:當(dāng)你一段時間不使用瀏覽器,它就會清空你的緩存。這個插件的定期清空緩存可能是一個不錯的選擇,只有在訪問會話期間會被追 蹤,不過反正他們也能夠記錄下哪個IP訪問了哪個頁面,所以這是沒有什么大不了的。不過之后的訪問由于緩存被清空(假設(shè)跟蹤是基于緩存),看起來都是一個 新的用戶,追蹤將無法繼續(xù)。
我不知道任何其他能夠定期清除緩存的插件(例如,每72小時一次),但應(yīng)該是有的。這將是一個很好的方法,這對于99%的用戶都是有用的,因為這個并不會使性能下降太大,同時還限制了追蹤。
更新:我聽說Firefox的插件SecretAgent也有ETag的覆蓋,以防止這種類型的追蹤。你可以對于有些站點設(shè)置白名單重置緩存,以達到防止追蹤的目的。這個已經(jīng)確認能夠防止追蹤。SecretAgent 的網(wǎng)站。