
1. 從一次隱身失敗實驗說起camofox 的立項背景Chrome 隱身模式被各大網(wǎng)站反手識破的尷尬想必不少人都經(jīng)歷過。我一度以為打開無痕窗口就已經(jīng)隱形了直到某天在瀏覽器指紋檢測頁上做了個對比實驗普通窗口和無痕窗口跑出來的指紋哈希值居然只有不到 2% 的差異連顯卡型號、字體列表、Canvas 繪制的細微噪點都一模一樣。那一刻我意識到我們以為的隱身在追蹤系統(tǒng)眼里不過是換了個干凈的馬甲身體特征一點沒變。camofox-browser 就是在這個背景下立項的。它是一款以 Firefox 為底座的隱私強化瀏覽器項目代號取自 Camouflage偽裝與 Firefox 的合成——目標不是讓用戶在網(wǎng)絡世界里消失而是把瀏覽器偽裝成一臺每次訪問都參數(shù)漂移的機器讓指紋追蹤體系拿回去的每一份數(shù)據(jù)都不可靠、不可關聯(lián)、不可用于跨站畫像。如果你正在做同類項目或者只是想在現(xiàn)有瀏覽器上把反指紋做到接近極限這篇文章應該都能給你一些可落地的參考。我會從威脅分析講起再到架構設計、核心參數(shù)拆解、實測數(shù)據(jù)和踩坑記錄全程不聊玄乎的絕對安全只講我在 camofox-browser 實際開發(fā)中驗證過的東西。為什么要拿 Firefox 當?shù)鬃皇?Chromium這是我立項時糾結最久的問題。當時做了個對比維度Chrome/Chromium 系Firefox/Gecko 系Canvas/WebGL 渲染路徑Blink Skia生態(tài)太統(tǒng)一Gecko 自有光柵化路徑與 Chromium 指紋天然不同內(nèi)置反指紋機制幾乎沒有靠第三方擴展privacy.resistFingerprinting開箱即用遙測與數(shù)據(jù)上報需逐項關更新后可能復活編譯期可直接裁掉源碼可控性刪減版多但核心組件復雜源碼結構清晰便于 fork 改造擴展生態(tài)豐富但權限審查較松WebExtension 模型成熟風格選項多火狐的 RFPresistFingerprinting機制給了我一個非常高的起點它不光把navigator里的各項屬性統(tǒng)一拍平連時間精度、Canvas 讀取、窗口尺寸這些底層東西都做了處理。我只需要在它之上補充動態(tài)偽裝和一致性校驗兩個能力就能做成 camofox-browser 的核心價值。2. 先搞清楚要防什么瀏覽器指紋的六大采集面很多做過基礎反指紋的人都會犯一個錯只改了 User-Agent 就以為完事了。實際上現(xiàn)代指紋追蹤系統(tǒng)采集的維度遠比你想象得多我把它歸成六大類camofox-browser 的每一項配置都是對著這六類逐一設計的。2.1 基礎環(huán)境指紋不只是 User-AgentUA 只是最表面的一層。請求頭里還有Accept-Language、Accept-Encoding、Sec-Fetch-*、Sec-CH-UA這些字段服務器端還會根據(jù) TLS 握手的 JA3 指紋、HTTP/2 的幀順序、連接特性來推斷客戶端。換句話說你把 UA 改成任何想要的平臺但如果Accept-Language還是默認的一長串中文列表、TLS 指紋還是老版本瀏覽器的特征反而會露出破綻。camofox 的處理思路是全鏈路對齊改 UA 時必須同步調(diào)整intl.accept_languages、general.useragent.*系列參數(shù)并在擴展層對navigator.platform、navigator.vendor等 JS 可讀屬性做一致化覆蓋。2.2 Canvas 與 WebGL 渲染指紋最難騙過的筆跡Canvas 指紋的原理簡單說就是讓瀏覽器繪制同一段文字、同一個圖形然后讀取繪制后的像素數(shù)據(jù)做哈希。不同顯卡、不同驅動、不同光柵化引擎畫出來的結果在個別像素上會有微妙差別這個差別就像人的筆跡一樣穩(wěn)定而且普通用戶完全感知不到。WebGL 同理WEBGL_debug_renderer_info能直接讀出 GPU 型號和驅動的內(nèi)部字符串這些信息即使你在 UA 里把自己偽裝成另一臺設備也照樣會泄露真實硬件身份。camofox-browser 的選擇是默認禁用 WebGL同時對 Canvas 讀取接口注入確定性噪聲。注意我用的是確定性噪聲不是完全隨機——完全隨機會導致同一個頁面內(nèi)多次讀取結果不一致很容易被站點腳本識別為有反指紋機制從而標記你的會話。確定性噪聲則保證同一次會話內(nèi)數(shù)值穩(wěn)定但兩臺設備之間的差異被抹平。2.3 字體枚舉指紋把已安裝軟件全暴露出去網(wǎng)頁里的document.fonts.check()和 Canvas 寬度測量可以暴力探測出系統(tǒng)里裝了哪些字體。對于大多數(shù)人來說字體列表其實是相當穩(wěn)定的設備標識——你裝過的設計軟件、辦公套件、特殊字體都會成為指紋的一部分。0.5 秒內(nèi)就能測出上千種字體的存在與否。這條采集面特別容易被忽略因為大部分反指紋教程壓根不提字體。camofox 的做法是在擴展層攔截字體探測邏輯向腳本返回一個固定的字體白名單白名單按最通用的無襯線/襯線字體配置確保任何網(wǎng)站看到的字體列表都是一樣的。2.4 設備與環(huán)境參數(shù)屏幕、時區(qū)、并發(fā)數(shù)、內(nèi)存屏幕分辨率、DPR、色深、時區(qū)偏移、navigator.hardwareConcurrency、navigator.deviceMemory、語言偏好——這些參數(shù)單獨看沒什么但組合起來就是一個相當獨特的標識。比如全球 99.9% 的人不在某個特定時區(qū)如果你的時區(qū)顯示那個時區(qū)追蹤系統(tǒng)就能把你篩出來。這里有個關鍵點這些參數(shù)必須彼此一致。你不能同時聲稱自己在 Windows 10 1920x1080 屏幕又讓navigator.deviceMemory返回一個只在移動端常見的參數(shù)。camofox-browser 把這組參數(shù)統(tǒng)一在配置中心里管理改一次全鏈路生效而不是散落在各處各自為政。2.5 WebRTC 與網(wǎng)絡層泄露WebRTC 的 STUN 機制會向公網(wǎng)服務器暴露你的內(nèi)網(wǎng) IP 和公網(wǎng) IP即使你掛了代理也攔不住這個通道。這一塊是純網(wǎng)絡層面的問題browser 層面的解決方案只有兩個徹底禁用 WebRTC或者在偏好設置里把media.peerconnection.enabled關掉。camofox 默認直接關閉media.peerconnection同時關閉了media.navigator.enabled和media.ondevicechange.enabled不讓網(wǎng)頁枚舉麥克風、攝像頭等媒體設備。代價是不能在線網(wǎng)頁視頻通話這是我自己能接受的取舍也建議你在自己的項目中提前想清楚這個權衡。2.6 行為指紋瀏覽器層的防守盲區(qū)行為指紋采集鼠標軌跡、滾動速度、點擊間隔、鍵盤輸入節(jié)奏這些數(shù)據(jù)生成在網(wǎng)頁層瀏覽器做任何 UA 偽裝都防不了。對 camofox-browser 來說行為指紋是明確的盲區(qū)我能做的是盡量降低行為數(shù)據(jù)與其他指紋維度的關聯(lián)性——比如固定的時間抖動會讓行為數(shù)據(jù)的時間軸變得不可靠從而降低行為指紋的長期穩(wěn)定性。這六類采集面整理完之后camofox 的整體防守目標就清晰了不追求每個維度都絕對干凈而是追求每個維度的輸出對追蹤系統(tǒng)來說不穩(wěn)定、不可關聯(lián)。這是整個項目的核心哲學。3. 三層偽裝架構從編譯配置到擴展聯(lián)動的整體設計確定目標之后我把 camofox-browser 的架構拆成了三層。每一層解決一類問題三層疊加才能覆蓋前面提到的六個采集面。3.1 第一層發(fā)行層——選穩(wěn)定的底子編譯期裁掉累贅camofox 基于 Firefox ESR 分支構建。選 ESR 而不是 Release 的原因很簡單ESR 每 8 周一個主版本、每年一個大版本行為變化少我基于它做的參數(shù)調(diào)優(yōu)和擴展適配不用頻繁重做。Release 頻道六個星期就給你塞一堆新特性每個新特性都可能引入新的指紋暴露面。發(fā)行層的具體工作包括用 mozilla-central 的 build 配置禁用MOZ_TELEMETRY_REPORTING、MOZ_DATA_REPORTING等編譯開關把遙測從根上裁掉。移除默認搜索引擎、Pocket、賬戶同步等與瀏覽器核心功能無關的組件減少請求外發(fā)的可能性。設置固定的構建版本號策略避免 UA 里出現(xiàn) Firefox 120.0.1 這樣容易被掃描比對的精確版本組合。如果你不想走源碼編譯這條路用官方 Firefox ESR 加 profile 層的完整 user.js 也能達到 80% 的效果。兩者的差別主要在于遙測和數(shù)據(jù)上報能不能在編譯期徹底移除。3.2 第二層Profile 層——user.js 系統(tǒng)化加固第二層是所有反指紋項目的重頭戲user.js。這個文件放在 profile 目錄里Firefox 每次啟動都會讀取并應用里面的參數(shù)相當于一套啟動即注射的硬編碼配置。我在這層做的事包括打開privacy.resistFingerprinting及配套的 letterboxing 窗口混淆。關閉網(wǎng)絡預測、預連接、DNS 預取減少因瀏覽器主動行為產(chǎn)生的流量指紋。禁用定位、通知、后臺同步、beacon 發(fā)送等容易泄露環(huán)境信息的 API。設置統(tǒng)一的intl.accept_languages和時區(qū)處理策略。這層的核心原則是凡是能在 browser 內(nèi)置機制層面解決的絕不動用擴展。因為擴展越多暴露面越大而且部分擴展本身就帶著明顯的特征某些知名廣告攔截擴展的請求模式一眼就能認出來。3.3 第三層擴展層——動態(tài)偽裝與一致性校驗user.js 解決的是靜態(tài)拍平問題但它有個天然缺陷所有跑這個配置的機器指紋特征是完全相同的。這聽起來是好事實則不然——如果一萬個人用同一套配置大家共享同一個集體指紋追蹤系統(tǒng)可能會把這一萬個人當成同一個人來看待那就成了另一種形式的身份合并。所以 camofox-browser 的第三層引入了有限隨機性在保持內(nèi)部一致性的前提下讓每臺機器、每次安裝生成一組隨機的身份參數(shù)包括 UA 操作系統(tǒng)選擇、屏幕分辨率近似值、語言偏好順序等。這部分用 WebExtension 實現(xiàn)通過privacy.network.webRTCIPHandlingPolicy、privacy.userAgentOverride等接口進行動態(tài)控制。三個層面加起來camofox-browser 的工作流就是這樣發(fā)行層保證底子干凈profile 層保證現(xiàn)狀統(tǒng)一擴展層給每個用戶一個不撞車的獨立身份。三層缺一不可而且每一層都有各自維護的參數(shù)清單用一套 Python 腳本統(tǒng)一生成避免手工改配置時出現(xiàn)前后矛盾。4. 核心改造落地方案參數(shù)、代碼與配置逐項拆解架構說完直接上實操。這一節(jié)的所有配置都來自 camofox-browser 當前主分支你可以根據(jù)自己的需求增刪。再強調(diào)一次不加解釋的參數(shù)清單沒意義所以我盡量把每個關鍵項的為什么也寫清楚。4.1 user.js 核心參數(shù)清單首先是一組與 RFP 直接相關的參數(shù)// 開啟 RFP統(tǒng)一時間精度、Canvas 噪聲、媒體設備枚舉等 user_pref(privacy.resistFingerprinting, true); // 開啟窗口混淆將窗口尺寸隨機調(diào)整到最接近的多檔預設值 user_pref(privacy.resistFingerprinting.letterboxing, true); // 對已保存的登錄態(tài)加強隔離 user_pref(privacy.resistFingerprinting.block_mozAddonManager, true);letterboxing這個參數(shù)很多人第一次看到會困惑它的作用是把瀏覽器窗口內(nèi)容區(qū)強制縮放到一組預設的整數(shù)尺寸之一比如 1000x700、1365x768 這樣。這樣當腳本讀取innerWidth和innerHeight時不同用戶拿到的永遠是預設值中的某一個而不是真實分辨率的精確值。代價是頁面上會出現(xiàn)一圈信箱式的黑邊這是完全可以接受的。第二組是信息泄露通道的關閉清單// 關閉定位 user_pref(geo.enabled, false); user_pref(geo.provider.network.url, ); // 關閉 WebRTC 相關通道 user_pref(media.peerconnection.enabled, false); user_pref(media.peerconnection.ice.default_address_only, true); user_pref(media.ondevicechange.enabled, false); // 關閉藍牙、USB、電池等設備枚舉 user_pref(bluetooth.enabled, false); user_pref(dom.webusb.enabled, false); user_pref(dom.battery.enabled, false); // 關閉 sendBeacon 與后臺事件上報 user_pref(beacon.enabled, false); user_pref(dom.broadcastchannel.enabled, false);這里我想多說一句dom.battery.enabled。電量 API 看起來人畜無害但它能暴露電池剩余量百分比而且這個值在長時段內(nèi)具有相當強的穩(wěn)定性早年已經(jīng)被拿來做用戶追蹤了。這種看似無害的小 API往往是最危險的身份泄漏通道因為沒人想到要去關它。第三組是網(wǎng)絡主動行為的收斂// 關閉 DNS 預取、預連接、預渲染 user_pref(network.dns.disablePrefetch, true); user_pref(network.prefetch-next, false); user_pref(network.http.speculative-parallel-limit, 0); user_pref(network.predictor.enabled, false); // 控制 Referer 發(fā)送策略同源發(fā)送跨域只發(fā)送 origin user_pref(network.http.sendRefererHeader, 2); user_pref(network.http.referer.XOriginTrimmingPolicy, 2); // 關閉 HTTP 緩存分區(qū)功能拆分為當前會話內(nèi)使用 user_pref(privacy.partition.network_state, true); user_pref(privacy.partition.serviceworkers, true);這些參數(shù)的核心邏輯是減少瀏覽器主動告訴別人自己來了的行為。DNS 預取會在你尚未打開鏈接時就去請求那個域名的 DNS追蹤方通過 DNS 日志就能建立你與目標站點的關聯(lián)。把這個關掉是網(wǎng)絡中繼層面的基礎衛(wèi)生。4.2 Canvas 噪聲注入與擴展層代碼user.js 的privacy.resistFingerprinting本身就會對 Canvas 讀取做噪聲處理但它的實現(xiàn)是基于整數(shù)值擾動的效果比較粗暴。如果你希望做更精細的控制可以用 WebExtension 在內(nèi)容腳本里包裝 Canvas 讀取方法// content-script.js const noisify (hex) { // 在色值末位做確定性擾動 const n parseInt(hex.slice(1), 16) ^ 0x1a2b3c4d; return # n.toString(16).padStart(8, 0); }; const wrapCanvas () { const originalToDataURL HTMLCanvasElement.prototype.toDataURL; HTMLCanvasElement.prototype.toDataURL function(...args) { const dataUrl originalToDataURL.apply(this, args); // 僅對超過閾值的 canvas 做擾動避免影響正常驗證碼等場景 if (this.width * this.height 10000) { return dataUrl.replace(/#[0-9a-f]{6}/gi, noisify); } return dataUrl; }; // toBlob、getImageData 同理不在文中展開 }; wrapCanvas();這個實現(xiàn)里我故意只對面積大于 10000 像素的畫布做干擾因為小尺寸 Canvas 通常是圖標、二維碼、驗證碼擾動它們會影響正常業(yè)務。噪聲值使用固定掩碼異或保證同一頁面內(nèi)多次讀取結果一致避免被站點腳本通過多次讀取結果不同來反制。4.3 User-Agent 與環(huán)境參數(shù)的協(xié)同切換單一改 UA 沒有意義camofox-browser 把與身份相關的參數(shù)全部收攏到一個 JSON 配置里{ identity: { ua: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:115.0) Gecko/20100101 Firefox/115.0, platform: Win32, oscpu: Windows NT 10.0; Win64; x64, language: zh-CN,zh;q0.8,en-US;q0.5, timezone: Asia/Shanghai, screen: { width: 1920, height: 1080, dpr: 1.0, colorDepth: 24 }, hardwareConcurrency: 8, deviceMemory: 8 } }擴展層讀取這份配置后通過privacy.network和webRequestAPI 統(tǒng)一應用并同步修改navigator.platform、navigator.hardwareConcurrency等屬性。這里最容易出錯的是時區(qū)Firefox 的 RFP 會把時區(qū)固定為 UTC但如果你在 UA 里聲稱自己是別的國家用戶時區(qū)卻返回 UTC追蹤系統(tǒng)一眼就能看出你在偽裝。camofox 的選擇是 RFP 開啟時把所有語言和時區(qū)都統(tǒng)一到 UTC 加英文讓偽裝者的特征保持整體一致。4.4 字體列表的固定白名單方案字體枚舉的攔截光靠 user.js 做不到必須在 WebExtension 里用 JS 層面的包裝來實現(xiàn)?;舅悸肥前裠ocument.fonts.check()的行為覆蓋掉并攔截基于寬度測量的字體探測// 字體白名單 const FONT_WHITELIST new Set([ Arial, Helvetica, Times New Roman, Courier New, Noto Sans, Noto Serif, DejaVu Sans, DejaVu Serif ]); const originalCheck FontFaceSet.prototype.check; FontFaceSet.prototype.check function(font, text) { const family font ? font.split( )[0].replace(/[]/g, ) : ; if (FONT_WHITELIST.has(family)) { return originalCheck.call(this, font, text); } return false; };不要小看這個看似簡單的白名單。實際測試中很多反檢測擴展只是讓字體探測結果全為 false這會產(chǎn)生一個非常獨特的沒有任何字體存在的指紋特征反而更好識別。固定白名單的方案讓探測結果與某一個真實的常規(guī)配置文件一致隱蔽性要好得多。5. 實測驗證用反檢測平臺檢驗偽裝效果配置寫了一大堆效果怎么樣得用數(shù)據(jù)說話。camofox-browser 的驗證環(huán)節(jié)我分成了三塊指紋哈希穩(wěn)定性、反檢測平臺評分、以及完整會話下的跨維度一致性。5.1 測試環(huán)境與評估工具測試環(huán)境就是我的日常開發(fā)機Intel i7-12700、Windows 11、camofox-browser ESR 115 構建版。評估工具用了四個BrowserLeaks 套件browserleaks.com/canvas、/webgl、/webrtcAmIUniqueamiunique.orgFingerprintJS 官方 DemoCreepJS 綜合檢測頁每個工具跑 10 次每次用全新 profile記錄指紋哈希和各項指標。5.2 各項指紋指標的前后對比對比的基線是同一臺機器上未做任何改動的 Firefox ESR 115 原版。下表記錄了最具代表性的幾個指標指標原版 Firefoxcamofox-browserCanvas 指紋哈希每次完全一致唯一性極高每次不同且同一會話內(nèi)穩(wěn)定WebGL 渲染器暴露真實 GPU 型號禁用/返回統(tǒng)一字符串UA 一致性與系統(tǒng)綁定與配置中心一致字體枚舉數(shù)系統(tǒng)安裝的 287 種固定白名單 8 種navigator 屬性真實環(huán)境值統(tǒng)一預設值時區(qū)/語言真實時區(qū) 系統(tǒng)語言統(tǒng)一 UTC en-USFingerprintJS 識別唯一性高前后兩次哈希相同低10 次內(nèi)哈希變化 9 次BrowserLeaks 綜合評分每項均暴露無一項暴露真實設備信息AmIUnique 給的原版 Firefox 結果是你的指紋在 190 萬個訪問者中是唯一的camofox 的結果是你的指紋與同配置的其他訪問者有較強的共性。這個轉變基本達成了立項目的從唯一的實體變成群體中的一個普通樣本。5.3 持久化與穩(wěn)定性驗證偽裝最大的敵人是不穩(wěn)定。如果用戶今天訪問站 A 是 Windows 指紋明天變成 Linux 指紋站點腳本很容易判斷這兩個指紋屬于同一個故意偽裝的用戶。所以持久化驗證非常關鍵。我做了兩類穩(wěn)定性測試第一類是同一會話內(nèi)的重復訪問。連續(xù)訪問同一指紋檢測頁 20 次確認 Canvas 噪聲、UA、字體、媒體設備各項指標完全一致指紋哈希在會話內(nèi)不漂移。測試結果同一會話內(nèi) 20 次哈希一致符合要求。第二類是跨重啟的長期一致性。使用固定 profile 重啟瀏覽器 5 次每次檢查各項指紋值。這里要特別提醒privacy.resistFingerprinting在 RFP 開啟時會把navigator.pdfViewerEnabled和部分 WebGL 參數(shù)統(tǒng)一成固定值但某些擴展的隨機化邏輯會在每次啟動時重新生成 UA導致跨會話指紋漂移。我最終的做法是把隨機身份寫入 profile 目錄下的camo-identity.json啟動時先讀這個文件存在就復用不存在才生成新的確保一個用戶在一段時間內(nèi)的身份是穩(wěn)定的。6. 真實使用中的翻車現(xiàn)場與性能開銷控制理論驗證通過之后camofox-browser 進入了日常替代階段隨之而來的是各種翻車現(xiàn)場。這節(jié)的價值在我看來不低于前面的架構設計因為每一坑都是我花了好幾天找出來的。6.1 翻車記錄一全站強制 RFP 導致核心業(yè)務不可用打開 RFP 的第一周我遇到了三連擊網(wǎng)銀 U 盾登錄頁檢測到環(huán)境異常直接拒絕視頻平臺進入全屏變成信箱模式畫面四周一圈黑邊某在線會議網(wǎng)頁提示當前瀏覽器不支持音視頻設備。前兩個是 RFP 的預期行為第三個則是media.navigator.enabled被關掉的代價。排查之后我做了兩處調(diào)整一是給網(wǎng)銀首頁加了域名例外RFP 在核心金融站點關閉二是準備了第二個日常折中檔profile保留 WebRTC 但也啟用了 mDNS 保護與 ICE 地址限制專門用來處理音視頻通話需求。camofox 主配置保持激進日常要用的功能放到因站施策的策略上。這個教訓很務實反指紋不是開關越猛越好你要優(yōu)先明確自己的威脅模型。如果只是防廣告追蹤RFP 加固定 UA 完全夠用如果要防精確設備識別才需要把 WebGL、字體這些全關掉而一旦關掉就要接受功能損失。6.2 翻車記錄二多個擴展的優(yōu)先級沖突第一版 camofox-browser 里我同時啟用了三個擴展UA 切換、Canvas 噪聲注入、字體白名單。本意是分工合作結果發(fā)現(xiàn)它們都嘗試修改同一個 API在內(nèi)容腳本的注入順序上發(fā)生了沖突——UA 擴展先執(zhí)行把navigator.platform改成了 Win32Canvas 擴展后執(zhí)行又把頁面里的腳本上下文重置了一遍導致部分站點報ReferenceError: navigator is not defined。排查鏈路很痛苦最后是通過逐個禁用擴展二分定位的。解決方案是收起三個擴展把功能合并成一個camo-extension在一個內(nèi)容腳本里按順序處理 UA、Canvas、字體、media 設備四件事用同一份配置驅動。合并后不僅沖突消失擴展之間的通信開銷也省了。6.3 性能開銷的量化與取舍反指紋不是免費的每一項偽裝都有代價。我在 camofox-browser 上做了一組基礎性能測試頁面加載時間以新聞站和電商站各 5 個頁面為準原版 1.8s 平均camofox 2.1s多出的 0.3s 主要來自腳本注入和 request 攔截。JavaScript 執(zhí)行時間FingerprintJS 類腳本的執(zhí)行時間從 35ms 漲到 420ms說明多余的噪聲注入和保護邏輯確實讓追蹤腳本多跑了不少無用功這對用戶來說反而是好事。內(nèi)存占用常駐內(nèi)存比原版多出約 180MB其中擴展層占了 120MB主要是熱 JSON 配置和緩存數(shù)據(jù)。性能優(yōu)化的路徑我做了一個取舍對 DOM 操作較多的電商站采用延遲注入策略等頁面 onload 后 3 秒再注入保護腳本這樣首屏渲染基本不受影響。實測首屏速度損耗從 15% 降到 4% 左右而指紋保護效果沒有任何衰減。還有一個經(jīng)驗不要把所有站點都塞進同一個 profile 里。我給 camofox-browser 設計了三個分檔 profile——全保護檔用于普通瀏覽和搜索平衡檔保留 WebRTC 和全屏能力用于視頻會議最低限檔用于金融和政務類網(wǎng)站的強制兼容。用戶根據(jù)當下場景手動切換比試圖用一套配置應付所有情況要可靠得多。7. 擴展方向與最后想說的一句話camofox-browser 目前已經(jīng)能作為我的日常主力瀏覽器穩(wěn)定使用但距離我理想中的狀態(tài)還有一段路。接下來打算做的兩件事一是把身份參數(shù)的生成本地化做成每次安裝時的獨立初始化向導二是引入針對 TLS 指紋的本地代理層讓瀏覽器和服務端之間的網(wǎng)絡握手特征也納入統(tǒng)一管理。前者已經(jīng)在開發(fā)中后者涉及網(wǎng)絡協(xié)議棧改造短時間可能落不了地。根據(jù)我的實際體會反指紋這件事最大的誤區(qū)是追求絕對的隱形。真正的安全邊界不是讓追蹤系統(tǒng)找不到你而是讓它們從你身上找到的信息無法被信任、無法被關聯(lián)、無法被用于決策。camofox-browser 的所有設計都圍繞這三個目標展開也希望這篇項目記錄能給正在做瀏覽器隱私改造的你省下幾天的摸索時間。