瀏覽器端js有如何為本機生成固定的uuid?

瀏覽器端js有什麼辦法可以拿到/生成本機的固定不變的udid/uuid?


瀉藥,這個一般用作給用戶標識唯一標記用,在廣告領域作用比較大,恰巧我還是有點了解。

直接js獲取是沒戲了,沒這個api,一般的做法都是收集用戶信息然後做一個hash生成。

具體收集哪些用戶指紋信息,幫你簡單列舉一下,整個ua的值,是否開啟localstorage,屏幕解析度,比如你本地安裝的插件(ie非ie區別對待,插件屬性不同),計算機硬體信息,是否支持一些新瀏覽器的特性,比如本地有安裝indexdb,ie下還有個addBehavior可以搜索下用法,大概收集好這些信息之後,如果覺得還不放心,如果支持canvas的瀏覽器,你可以生成一個固定的canvas圖形,但是由於終端不同,最後圖形的細節還是有很大差別,參見:

Canvas Fingerprinting 裡面的gif圖,最後再轉成字元。

因為這些信息都是經常不變的,所以完全可以當成是一個客戶端指紋信息了。

然後把這些所有信息做一個hash運算,這裡有一個庫就是這個原理編寫的,代碼很少:

fingerprintjs/fingerprint.js at master · Valve/fingerprintjs · GitHub

專門生成用戶指紋的js,他的hash演算法你可以自己寫,默認選擇的是MurmurHash3演算法,是redis實現hash的2種演算法之一,特點是高性能行運算,低概率碰撞,也是常用的負載均衡演算法。自己去google吧,Austin Appleby發明的很出名的一個演算法,各種語言都有實現 。。

大概瀏覽器端生成uuid就是這麼個做法了。


在中國哪用這麼麻煩,直接要求用手機號註冊,不登陸不讓看任何內容就行了,反正中國大部分的網民已經習慣這種事情了,搞一個釣魚網站都能收集到一大堆手機號、姓名和家庭住址、身份證號。用賬戶進行識別,比搞什麼瀏覽器追蹤好用多了。我的瀏覽器noscript,privacy badger,adblock等一系列阻止瀏覽器指紋追蹤的擴展都裝著,追蹤性的script都不會被瀏覽器載入。

如果膽子大一些,還可以連身份證號一起要過去,甚至像支付婊等一樣,要求註冊用戶提供舉著身份證的正面照片,這樣的一條信息據說在二十塊錢以上。反正《中華人民共和國反恐怖主義法》也模模糊糊有這樣的要求,到時候就是網站做不成,把用戶數據打包一賣也是一筆錢。

中國在事實上並不會處罰這種行為,甚至用Google搜索特定關鍵詞能搜索出一大堆來,因為那些網站訪問控制沒做好,被Google爬到,而Google上了人工智慧,可以通過對內容的描述來搜索照片。

寫出來是為了警示風險,許多網站在做著這樣的py交易。下圖是Google image search 的一頁結果。


也不知道怎麼就看到了這個問題,撞見了就回答一下。

我在美帝讀博研究方向就是基於JS的瀏覽器和機器指紋的生成,@小爝的回答已經很詳細了,我來補充下我幾個月前在信息安全頂會發表的論文的最新進展吧。
說實話這方面研究已經很具體了,可以繼續研究的餘地不大,無非就是像@小爝說的那樣,採集各種不同的feature ,將它們綜合起來,得到一個最終的哈希值,以前的研究無非是用瀏覽器安裝的插件,canvas 渲染結果,甚至音效卡的渲染結果,瀏覽器的可用字體等等的吧。每一個feature 的熵值可能不高,綜合起來就高很多了。我的最新的研究結果已經在99%以上的準確度了

但是這種做法有一個致命的缺點,就是穩定性太差,用戶換個瀏覽器就不能fingerprint 這個用戶了,所以我們的研究就用了很多跨瀏覽器特性,比方說顯卡渲染結果,系統字體,音效卡特性,屏幕,支持語言等等,最終達到同一個電腦不同瀏覽器也能獲得同樣指紋的目的。也就是說,就算你換了瀏覽器,我們也能一定程度上得到機器的指紋。(然而準確度我自己都覺得沒法用,只能算是一個開始的嘗試,後續我也會跟進這個方向)
知乎上已經有一個相關專欄文章說的是我們的項目。

跨瀏覽器指紋追蹤技術:毫無障礙的查看你的瀏覽記錄 - 知乎專欄

(PS: 做這篇論文的時候我還是個碩士生,一作自然就成了教授。現在做了博士才知道這個一作多重要)

上邊這個新聞有一個網站,可以試一下我們最新的成果

http://www.uniquemachine.org

這個網站還沒做完,伺服器在美國,可能會被一定程度的牆,而且其中有大量的研究用的計算,所以中間會卡一會。機器指紋部分大部分沒完成,也沒有一個成熟的min.js可以拿出來用。開發者就我一個人,雖然我現在還在加班加點的開發。。。(捂臉逃。。。)

具體各種不同的feature都有多大的獨特性在上述鏈接的圖片里已經說的很清楚了。這裡就不扯了。

現在這個話題其實是挺火的,很多大的公司也在關注這個方面。fingerprintjs2已經有跟多成熟的公司在用了。

同時還有一個很重要的問題,雖然我們在選取feature的時候已經在小心的用盡量穩定的feature了,實際上這些feature很不穩定,隨便一個瀏覽器升級就可以輕鬆改變瀏覽器指紋,針對這個問題,我下一個研究就是動態指紋,盡量做到即使瀏覽器升級,電腦安裝新軟體,顯卡升級等等,也能生成一樣或者類似的指紋。但願能夠搞出點事情來。


本機的固定不變的udid/uuid

——如果保存在cookies里,每次試圖生成前先檢查cookies,已經有了就不重新生成——也算 固定不變 了吧

然後說 生成:到專門返回uuid/guid的網站免費獲取。。。。

如果還沒有這樣的網站?我趕緊做一個。。。。


web前端js構造無法銷毀的類UUID識別碼,識別瀏覽器設備唯一性 - 焦糖心得(JOTTOWN)


可以利用瀏覽器緩存來生成用戶唯一標識,進行跟蹤。只要不清緩存就一直有效。


Create GUID / UUID in JavaScript?


別說js了,就算是native程序做個很好的機器特徵碼都不容易。


沒有


推薦閱讀:

有沒有必要將 DOM 結構緩存到本地?如果有,意義是什麼?
前端開發有沒有必要學習less,sass,coffee script等語言?
關於eval和數組計算的一些小問題?
編寫瀏覽器插件如何入門?
為什麼es6里的object不可迭代?

TAG:Web開發 | 前端開發 | JavaScript | UDID |