跳轉到

你的瀏覽器透露了什麼

下面列出的是網站在你打開頁面的那一刻就拿得到的東西,沒有問過你,也不需要你同意。任何一個網站都拿得到同樣的東西。

什麼時候用得上

換了新手機、剛重灌完電腦、或是聽人說某個瀏覽器比較安全卻不知道差在哪裡,下面三種情境都能自己核對答案。

  • 離開一段有監控的關係之後,換了新裝置想確認自己現在看起來還像不像原本那個人。打開頁面記下最上面那組短碼,用舊裝置再打開一次比對。短碼不同,代表兩台裝置的指紋對不起來。
  • 參加完數位安全講座,講師提到 Tor Browser 比較安全,但沒有說明差別在哪裡。用平常的瀏覽器打開頁面記下時區與字型,再用 Tor Browser 打開同一頁。時區變成 UTC、字型只剩一組,差別自己看得到,比任何人轉述都清楚。
  • 要向別人說明為什麼該在意,現場開著它比放投影片有效。畫面上每一個數字,都是從對方自己的裝置讀出來的。

單看不起眼,加起來就認得出人

上面每一項單獨看都很普通,時區有幾十種、螢幕尺寸有幾百種、字型組合有幾千種。問題在於它們會相乘。幾項湊在一起,能對上的人就從幾百萬掉到幾十個,再加上你造訪的時間與順序,往往就剩一個。

這叫瀏覽器指紋。它不需要 cookie,你清除瀏覽資料也不會消失,因為那些值本來就在你的裝置上。詳細的原理見瀏覽器指紋是什麼

換一個瀏覽器再看一次

最有用的用法是比較,有兩個方式。

最上面的八位短碼,是把上面幾項穩定的值揉在一起算出來的。換一個瀏覽器打開同一頁,比對短碼有沒有變就知道。視窗尺寸、儲存配額等會漂移的值沒有算進去,所以同一個瀏覽器每次開都是同一個碼。短碼本身就是一個識別碼,這些值加起來就足以認出你。

想知道是哪一項變了,就看每一項下面那行對照值。時區那一項會直接寫「Tor Browser 會顯示:UTC」,不用「會被統一掉」這種籠統描述,你當場就對得起來。

Tor Browser 打開,會看到時區真的變成 UTC、語言變成 en-US、顯示卡變成通用字串、字型只剩一組固定的。Tor Browser 的做法是讓所有使用者長得一樣,網站就分不出誰是誰。

想調整這些行為,見 Tor Browser 進階設定

什麼時候該回來看一次

指紋會變,而且變的時候你通常不會知道。幾個值得回來對一次短碼的時間點:

  • 換了新裝置或重灌之後:確認新舊兩台在網站眼中是不是同一個人
  • 離開一段受監控的關係之後:舊裝置的短碼對方可能記得,新裝置要確認對不起來
  • 裝了新的瀏覽器擴充功能之後:擴充功能會改變頁面的行為,有些直接改變指紋
  • 改了系統語言、時區或螢幕解析度之後:三項都算進短碼裡
  • 要向別人說明為什麼該在意的時候:畫面上每一個數字都是對方自己的裝置產生的

短碼只有八個字元,抄在紙上或記事本裡就夠,不需要留下整頁的值。點一下短碼會整段選取,剩下的複製動作由你自己按,這一頁不碰剪貼簿。

我們沒有在收集這些

整個工具刻意做成一個指紋收集器,你當然要問:這些數值有沒有被送出去?

答案是:所有數值只出現在畫面上,沒有送出去,也沒有寫進任何儲存。程式碼在 anoni-net/docs,測試裡有一項專門掃這份原始碼,出現任何送資料或寫入儲存的手段就會讓 CI 變紅。

開發者工具會看到的那兩個請求

打開開發者工具的網路分頁,clearnet 版的頁面會連兩個地方。

anoni.net 底下的子網域是我們自架的 Umami,記錄哪一頁被看了、從哪裡連過來、瀏覽器與作業系統的大類、螢幕尺寸的級距、國家,以及頁面的載入速度。它不放 cookie,也不做跨站追蹤。

螢幕尺寸的級距到 2026-08-23 才名實相符。在此之前頁面上已經這樣寫,實際送出的仍是精確的寬高。現在送出前會無條件捨去到百位,1440x900 送出去是 1400x900。這一頁說明螢幕解析度是指紋的一環,我們自己卻收精確值,前後並不一致。

載入速度也是同一天開始收的,內容是幾個標準指標:首次內容繪製(First Contentful Paint)、最大內容繪製(Largest Contentful Paint)、累計版面位移(Cumulative Layout Shift)。正體中文版的搜尋索引有 3.6 MB,第一次按下搜尋就要下載完整一份。在受限或高延遲的網路上,等待時間相當長,而要不要縮減它,目前沒有任何數字可以參考。

每一筆記錄還帶著一個建置代號,例如 21eb17c,就是產生本頁的 commit 短碼。改版前後的數字因此區分得開,載入時間變長時才追得出是哪一次改動造成的。代號跟你無關,同一次建置的所有讀者共用同一個。

static.cloudflareinsights.com 是 Cloudflare Web Analytics,一樣是流量統計,但它是第三方,資料進到 Cloudflare 而不是我們的機器。網站本來就走 Cloudflare,所以那家公司無論如何都看得到你的請求,這支 beacon 多給它的是頁面層級的效能與瀏覽數字。

兩者都不會去讀這一頁列出的任何數值。

我們送出的裝置與使用資訊

自架的那個分析端點,每次完整載入頁面時我們會多送一個值,就是上面表格裡的「顯示模式」:你是在瀏覽器分頁裡看,還是把網站安裝成 app 開著。送出去的只有那一個列舉值,沒有其他欄位。

為什麼要這個數字:介面決策需要它。獨立視窗沒有網址列,判斷連結真假時少了一個線索,QR code 讀取器與隱形字元偵測那類工具的提示就得寫得更完整。離線閱讀要預設存多少內容,也跟有多少人真的把網站當 app 在用有關。沒有這個數字,那些決定只能用猜的。

代價要說清楚:把網站安裝成 app 的人是少數,所以這個值本身就是一個區分度不小的特徵,跟表格裡其他項目是同一種東西。我們把它列進表格而不是藏起來,理由就在這裡。

小工具的使用情形

小工具區另外送七種事件。它們的用途都一樣:知道哪裡壞了、哪裡該投資源。送出去的一律是固定的代號,沒有檔名、網址,也沒有你輸入或解出來的任何內容。

事件 什麼時候送
stripmeta-ok metadata 清除成功 格式代號
stripmeta-unsupported metadata 清除器遇到不支援的格式 heicpdfunknown 等格式代號
stripmeta-verify-fail 清完的檔案打不開 格式代號
qrread-fail QR code 讀不出來 cantOpennotFound,加上格式代號
qrread-kind QR code 讀出來了 內容的粗分類,見下
offline-action 在離線閱讀頁按下操作 addremoveclearauto-onauto-offimages-onimages-off
display-mode 每次完整載入頁面 上面說的顯示模式

為什麼要這些數字,用最近的例子說明。QR code 讀取器有一段時間對 iPhone 拍的 HEIC 完全無效,畫面顯示「找不到 QR code」,而讀者照著建議去裁圖、重拍,做幾次都不會成功,因為那張圖從頭到尾沒有被解開過。那個狀況持續了多久沒有人知道,直到有人回報。qrread-fail 把「瀏覽器打不開這張圖」與「圖裡真的沒有碼」分開數,同樣的事下次會自己浮出來。

stripmeta-unsupported 回答的是「該不該投入支援 HEIC」。程式本來就分得出那個格式,只是不處理,過去那個資訊直接被丟掉。

stripmeta-ok 是 2026-08-23 補的,用來當分母。在此之前只送失敗,一個月 30 筆 unsupported,光看數字沒有比較的基準。有了成功的計數才算得出失敗率。

離線閱讀的操作決定預設值。自動存下內容預設是開著的,預算約 29.5 MB。有多少人把它關掉、有多少人按了清除,直接告訴我們這兩個預設對不對。

內容分類刻意做得粗

qrread-kind 送的是粗分類,不是實際的協定:

粗分類 涵蓋
credential 兩步驟驗證密鑰、Wi-Fi 密碼
network onion 位址、Tor bridge
contact 聯絡人、電子郵件、簡訊、電話
location 座標
link 一般網址
danger 會直接執行的協定
text 其餘

合併是刻意的。送出細類的話,一筆 otp 等於「這個人剛掃了一組兩步驟驗證密鑰」,一筆 wifi 等於「這個人正在連某個網路」。合併成 credential 之後,我們要回答的問題(哪一類的說明該加強)答案不變,但單筆事件不再指向一個具體處境。

danger 單獨留著,那是「掃到會直接執行的協定」,發生頻率本身就是安全訊號。

整站共通的五種事件

2026-08-23 起另外送五種,用來決定文件本身該怎麼寫。

事件 什麼時候送
search-used 有人用了站內搜尋 字數級距 shortmediumlong
search-zero 該次搜尋一筆結果都沒有 同上
search-hit 點了搜尋結果 firsttop3rest
lang-switch 用語言選單換了語系 來源與目標的語系代號
read-depth 捲到文章的四分之一、一半、四分之三、底部 255075100

搜尋關鍵字一個字都不送。你可能正在搜尋「防火長城」或「翻牆」,搜尋記錄留在任何地方都是風險,包含我們自己的資料庫。字數級距足以回答索引是否堪用,關鍵字內容答不出更多。零結果的比例指出缺少哪一類內容,點擊位置反映排序是否恰當。

語系切換次數是唯一能知道翻譯有沒有人用的訊號,因為文件站不看瀏覽器的語言設定,語系跟隨你自己選過的偏好。正體中文讀者改看英文版,通常代表譯文或術語有問題,屬於要回頭修內容的線索。

閱讀深度用來判斷一篇文章該不該拆開。比視窗還短的頁面不計數,短頁面一載入就已經在底部,計數只會讓平均值失真。

不想被算進去

clearnet 版可以直接關掉。下面的開關把 umami.disabled 寫進這台裝置的 localStorage,Umami 的腳本每次送出前都會檢查該鍵,有值就一筆都不送。設定只留在本機,清掉瀏覽器資料就會回到預設。

看不到開關,多半是因為你正在看 onion 版,該版連分析腳本都不會載入,沒有東西需要關掉。

另外三種方式。把網路關掉再開一次,斷網時一個請求都不會有。用 Tor Browser 的 Safest 等級,JavaScript 全關,這一頁與分析都不會執行。或者用 onion 版,那一版不載入任何分析。

瀏覽器開了 Do Not Track 或 Global Privacy Control 的話,從 2026-08-23 起我們也一筆都不送,下面「Do Not Track 與 GPC」一節有細節。

所有工具都不直接呼叫分析,一律經過同一個送出口,而那個送出口跟分析腳本寫在同一個區塊裡,onion 與 IPFS 版建置時整段被移除。那兩版的工具因此連送的能力都沒有。

我們修正的一個搜尋詞外洩

2026-08-23 之前,你從站內搜尋結果點進任何一頁,輸入的文字會跟著送進我們的分析資料庫。

原因是兩個各自合理的預設值相加。文件站的搜尋開了關鍵字高亮,Material 因此把命中的詞寫進每一條搜尋結果連結的 ?h= 參數。Umami 預設把完整網址送出去,包含問號後面的查詢參數。疊起來的結果是搜尋詞離開了你的瀏覽器。

現在每一筆送出前都會先過一道白名單。網址只留得下四個活動來源參數(utm_sourceutm_mediumutm_campaignutm_content),其餘的問號參數與 # 後面的片段一律清掉,事件名稱或值對不上白名單的整筆丟棄。白名單寫在 main.html測試逐條驗它,其中第一條驗的就是上述外洩。

2026-08-23 之前的舊記錄仍留有搜尋詞,如何處理尚未決定。

onion 版沒有這些

onion 版建置時會把整段分析拿掉,自架的分析與 Cloudflare 的 beacon 都不在裡面,顯示模式也不會送。

在 2026-08-23 之前,Cloudflare 那一支被擺在會被剝除的區塊外面,onion 版照樣會去載入它。那跟這一頁原本寫的「onion 版完全不載入分析」不符,是我們的疏漏,已經修正。

統計與識別的差別

同一個網站可以同時做「統計有多少人來看」與「認出你是誰」,前者需要的資料量遠小於後者,分辨兩者才是重點。

你實際上能做什麼

上面十五項裡,你在自己裝置上真正關得掉的只有三項。剩下的一般瀏覽器沒有提供開關,因為那些值本來就是網頁平台的一部分。

設定路徑會隨系統與瀏覽器版本變動,找不到的話在設定裡搜尋關鍵字通常比照著點快。

效益最高的一步是換瀏覽器

單一動作能處理最多項目的,是改用有內建防護的瀏覽器。三種選擇對應不同的處境:

你的情況 選擇 代價
對手有能力對特定目標投入資源 Tor Browser 連線較慢,部分網站會擋
想在日常瀏覽裡少留一點痕跡 Brave 對 canvas、WebGL、字型、audio 加雜訊或統一化,日常代價小得多
不想換掉現在的 Firefox 開啟 privacy.resistFingerprinting 要進 about:config 才找得到,開了之後部分網站會排版錯亂

Tor Browser 把上面幾乎每一項都統一掉,代價是連線較慢與部分網站會擋。Brave 對 canvas、WebGL、字型、audio 都加了雜訊或統一化,日常瀏覽的代價小得多。Firefox 有 privacy.resistFingerprinting,效果接近 Tor Browser 的做法,要在網址列輸入 about:config 才找得到,預設是關的。那個設定頁本身會先跳出警告,改到其他項目可能影響瀏覽器的其他功能,不熟悉 about:config 的話,直接用 Tor Browser 或 Brave 更單純。開了之後部分網站會排版錯亂。

先看看瀏覽器指紋是什麼那篇的比較再決定。

關掉位置權限

這是唯一會跳出授權視窗的項目,也是唯一能在系統層級整個關掉的。

「設定」→「隱私權與安全性」→「定位服務」→ 找到你的瀏覽器 →「永不」。

整個關掉定位服務也可以,但地圖與相機的定位標記會一起失效。

「設定」→「應用程式」→ 你的瀏覽器 →「權限」→「位置」→「不允許」。

另外在瀏覽器裡:「設定」→「網站設定」→「位置」→ 關閉。

「系統設定」→「隱私權與安全性」→「定位服務」→ 取消勾選你的瀏覽器。

「設定」→「隱私權與安全性」→「位置」→ 關閉「讓應用程式存取您的位置」。

多數桌面環境沒有系統層級的定位服務,瀏覽器自己的權限設定就是全部。在網址列左側的圖示裡可以撤銷已經給出去的權限。

不管系統怎麼設,瀏覽器每次都會問。按「不允許」就是了,而且那個選擇會被記住。

改語言偏好

送出去的語言清單是你自己設的,改成單一語言可以少洩漏一點。

「設定」→「語言」→ 把不需要的語言移除,只留一種。

「設定」→「一般」→ 往下找「語言」→「選擇」→ 只留一種。

Safari 用的是系統語言。macOS 在「系統設定」→「一般」→「語言與地區」,iOS 在「設定」→「一般」→「語言與地區」。

代價是多語言網站可能給你非偏好的版本。

Do Not Track 與 GPC 要想清楚再開

Do Not Track 是瀏覽器送出的「請勿追蹤我」請求,Global Privacy Control 是它的後繼版本。兩個訊號都可以在瀏覽器設定裡開關,但開了不見得對你有利。

實務上幾乎沒有網站遵守 Do Not Track,而送出訊號的人相對少,所以它反而成為一個區分特徵。Global Privacy Control 在美國幾個州有法律效力,其他地方的效果與 DNT 相當。

本站從 2026-08-23 起遵守兩者。開著任一個訊號的話,我們的分析一筆都不送。其他網站多半不會跟進,在別處開著訊號,得到的通常只是多一個區分特徵。

要開的話:Chrome 在「設定」→「隱私權與安全性」,Firefox 在「設定」→「隱私與安全性」,Safari 已經移除了這個選項。

時區與系統偏好改得到,但代價大

時區跟著作業系統走,改成 UTC 確實能少洩漏一項,但所有 App 的時間顯示都會跟著錯。深色模式、減少動態這些是無障礙設定,關掉會直接影響你每天的使用。

這兩項的正確處理方式是換一個會統一它們的瀏覽器,而不是犧牲日常使用。

其餘那些為什麼關不掉

螢幕解析度、CPU 核心數、顯示卡型號、canvas 與 audio 的渲染差異、裝了哪些字型、Client Hints(瀏覽器主動回報的裝置與系統資訊)、元素的次像素位置,都沒有開關可以關,因為它們是網頁平台提供給網站的能力,使用者無法個別停用。畫圖需要顯示卡回報自己能做什麼,排版需要量得出文字寬度。

擋掉那些能力的代價是網站會壞掉,所以瀏覽器不會讓你單獨關。有防護的瀏覽器改用另一種做法,讓每個人回報的值都一樣,或者加上每次都不同的雜訊,能力本身不動。

兩件我們刻意沒做

沒有匯出按鈕

匯出的檔案本身就是一份完整的指紋,留在裝置上比不留更糟。要比較的話用眼睛看,或者自己抄下幾個值。

沒有獨特性百分比

「你比 99.x% 的人獨特」那種數字需要一個母體資料庫才算得出來,我們沒有,也不打算為了算它而開始收集訪客資料。想看那種統計可以去 EFF 的 Cover Your Tracks,那是他們長期在做的研究。

地理位置

只有位置需要按按鈕,因為它會跳出授權視窗。其他每一項都是不問就拿得到的。

按了之後你會看到經緯度與誤差範圍,通常精確到幾十公尺以內。經緯度一樣只留在畫面上,重新整理就沒了。Tor Browser 直接停用定位功能,連問都不會問。

離線可用

跟這一區其他工具一樣,程式存進裝置之後沒有網路也能用。上面列的每一項都是在你的裝置上讀出來的,斷網時照樣讀得到。

要把這一頁帶著走,見離線閱讀