Firefox 隐私加固( Harden Firefox, Firefox Hardening )系列第六篇: Firefox 内核/配置层加固
上篇博文我们具体讨论了如何下载和初始配置。接下来为具体如何加固。分为 prefs.js 、 about:config 、 user.js 、 autoconfig 、omni.ja 、policies.json 、Arkenfox 、 Betterfox、 user-overrides.js 、浏览器实例等。
(一)解释什么是首选项
“配置选项”也叫“首选项”,英文为“ Preference ”。第一篇有所阐述,Firefox 提供了数以千计可供用户定制的参数。通过修改这些参数,可以对 Firefox 进行【全方位】定制。 Firefox 应该叫“首选项”更多。
每个首选项包含如下几个要素:(1)名称:每个首选项的名称必定是【唯一】的。“名称”由英文单词构成,单词之间以“小数点”或“下划线”分隔。
(2)数据类型:它们的“数据类型”必须是“布尔型、整数型、字符串型”这三者之一。你可能已经猜到了,“布尔型”的值只能是 true 或 false,就像布尔逻辑一样。“整数型”的值必须为整数,不过可以是负数。
(3)默认值:每个首选项都有个“默认值”。“默认值”包含在 Firefox 的安装包里面。除非我们这种有特殊要求的用户,否则【尽量不要】去修改“默认值”。哪怕对我们这种有特殊要求的用户,如果你不了解就不要修改。 Firefox 官方也有所阐述。
(4)当前值:每个首选项都对应某个“当前值”。当你修改的时候,修改的就是它的“当前值”。一开始的时候,每个首选项的“当前值”就等于它的“默认值”;如果被定制了(修改了),其“当前值”与“默认值”就有可能不同。
谁可以修改这些首选项? 除了我们用户,其实浏览器扩展也可以添加或修改【某些】“配置选项”。例如我最喜欢的 Resist Fingerprinting 扩展,就可以开启或关闭抗指纹追踪 RFP 。对, RFP 也当然包含在这些首选项里。
接下来介绍如何修改
(二) 介绍prefs.js 、 about:config 、 user.js 、 autoconfig 、omni.ja
1、prefs.js
每个 Firefox 实例中都有名为 prefs.js 的配置文件。这个文件保存了当前实例中【所有】首选项的设置。 该文件位于每个【实例目录】下,也就是说,每个实例完全可以不同。
很明显,该文件的扩展名是 .js,说明其内容是 JavaScript 语法。在 JavaScript 语法中,任何一行中如果出现【双斜杠】// ,那么“从双斜杠一直到行尾”均视为【注释】;另外,包含在 /* 和 */ 之间的内容也为【注释】。(注:第二种注释可以跨越多行,就像 Python 的 # 和 ''' 或 """ )。
所以除了注释之外,该文件的每一行有效代码对应一个首选项。文件中的每个有效代码行全都是如下这个样子: user_pref("配置项名称", 布尔型 True 或 False 、整数型的整数数值、字符串型具体字符串);。由于每一个首选项的名称都是字符串,因此上述代码中的配置项名称总是包含在【半角引号】中。如果某个首选项的数据类型属于“字符串型”,那么上述代码中的“配置项数值”也要包含在【半角引号】中;否则,就不需要使用引号。如果错误添加引号也会导致出错,甚至可能 Firefox 无法启动、报错。但一般来说,Firefox 遇到不认识的首选项名会原样创建一个自定义 pref 但不产生任何实际效果——不会报错,你也看不出问题。
注意: 请尽量【不要】直接修改 prefs.js 文件(虽然我也改过,问题也不大,但是【哪怕一处错误】也会让 Firefox 彻底无法启动甚至无报错)!如果你想知道为什么,和如何通过【配置文件】的方式定制 Firefox,请使用 user.js 或其他方式 (参见本文后面章节)。
2、 about:config
修改 Firefox 的首选项,最简单、安全的方式应该是“about:config”界面了。请在浏览器地址栏输入 about:config 然后敲回车,就进入该界面(提醒一下:打开该界面时,你大概率会看到一个警告提示,别慌张) 。
点击“接受风险并继续”,进入正式修改界面。
“about:config”界面主要是个的表格,截至写作时共2列,分别是第1列: 首选项的“名称”;第2列:首选项的“状态” 。当然最上面如图,有搜索框。
所谓的“重置”(reset)就是指“恢复默认值”。 似乎现在不能在 about:config 直接添加了,只能在 user.js 等地方了。
对于你来说,可能你会觉得每次修改首选项都要遇到这个警告,很烦人。那我们就在搜索框搜索“ general.warnOnAboutConfig ”,在我的 Firefox ESR 140 会显示如下:
不要紧张, 点击加号会变成这样:
点击垃圾桶(删除)旁边的切换,切换为“ False ”;下次打开就没有了。当然你大约猜到了, True 就是有、成立,反之 False 就是无、拒绝。
3、 user.js
你想不想一次设置 about:config ,以后改动很少,因为基本上出现过的首选项不太可能删除;或者你想不想换设备时不用重新设置如此之多修改过的的首选项、,亦或者将 Firefox 做成便携版 Portable 放到移动存储设备的时候也立刻带上你电脑的深度定制项?那么,总结下,你应该需要【持久化】设置,对不对? user.js 就是为此而生,当然不是只有这个方法。
Firefox 经常使用名为 user.js 的文件对首选项进行个性化定制。你一看就知道和前文的 prefs.js 一样,都是 .js 后缀,也就是 JavaScript 语法。该文件位于【实例目录】下,即非全局控制,只能影响此实例而不是全部实例。请注意:默认情况下【没有】这个文件!如果你想用这种方式定制 Firefox,需要在【当前实例】的目录下【手动创建】该文件,然后往这个文件中添加代码。 且定制的时候尽量【彻底关闭】 Firefox ,或者定制完成后你需要【彻底重启】下使之生效。
现在我们可以继续练习。 你可以创建一个空的 user.js 文件,在文件中添加如下代码,并存盘。
user_pref("general.warnOnAboutConfig", false);
请注意:上述代码中的“括号、引号、逗号、分号”必须都是【半角符号】 !就是和英语一样,否则【不会】生效!
存盘后应该可生效,和上面修改 about:config 效果一致。
解释为什么尽量【不要】直接修改 prefs.js ,而是尽量修改后缀、语法一样的 user.js :当 Firefox 启动的时候,会读取 user.js 和 prefs.js,拿到这两个文件中的首选项配置,并保存在内存中。如果发现这两个文件的配置有冲突,以 user.js 为准(也就是说:“user.js 的配置”会覆盖“prefs.js 的配置”,权限高于 prefs.js )。
请注意:如果同一个配置项在某个文件中出现多次,后面的代码行会覆盖前面的代码行。
当你打开“about:config”界面,Firefox 会把内存中的首选项信息显示给你看。如果你在这个界面上进行了修改,修改的结果会保存在内存中,同时也会保存到 prefs.js 文件中。但不会保存到 user.js 里,所以最好当然是直接修改 user.js !
另外,Firefox 当然【不会】去修改你用于定制的 user.js 文件。
4、autoconfig
这个和 omni.ja ,是专门针对“Firefox 极客”的,我不推荐使用,因为很容易发生你修改稍微一个错误,就会导致 Firefox 完全无法启动和毫无报错。因为这是涉及到 Firefox 【底层】设置。实话实说我没尝试修改过,我认为没必要和过于危险。在此仅做简要介绍。
“user.js”的局限性:通过“user.js”,虽然可以让你定制每一个首选项、方便带走等;但还是有如下局限性:
(1)局限性1——【无法】修改某个首选项的【默认值】
请注意:在 user.js 中修改的是【当前值】。不管“当前值”如何变,“默认值”【没】变。在某些特殊场合,你可能想要定制首选项的【默认值】。例如你不想让扩展随意更改、省力等。
(2)局限性2——【无法】锁定某首选项
所谓的“锁定”就是“禁止修改”的意思。比如说:某个第三方扩展会修改某个首选项的值(我刚刚说了 Resist Fingerprinting );但你又不希望这个首选项被随意修改。这时候就可以把这个首选项【锁定】。
所以,接下来介绍比 user.js 权限更高、更底层、的 autoconfig
Mozilla 提供了名为 autoconfig 的机制,可以更进一步地定制首选项。具体参见 Mozilla 官网的“这篇教程”(中文机翻版)。
在user.js 中,咱们只能使用 user_pref 这个函数,因为 about:config 只有这个函数;而在 autoconfig 这种定制方式中,还提供了更多的函数,至少包括如下( // 后的部分是注释):defaultPref("配置项名称", 配置项数值); // 该函数用于:定制配置项的【默认值】 lockPref("配置项名称", 配置项数值); // 该函数用于:设置配置项的默认值并【锁定】 unlockPref("配置项名称"); // 该函数用于:【解锁】配置项 clearPref("配置项名称"); // 该函数用于:把配置项的【当前值】恢复为【默认值】
5、omni.ja
比 autoconfig 更强大的、最强大的 omni.ja ;这触及到 Firefox 【最底层】的设置了,还是不会改尽量不要改。
具体来说:Firefox 是一个很复杂的开源项目,任何浏览器代码量都是惊人的。它的核心代码(比如: HTML 、 CSS 渲染引擎、 JavaScript 引擎)是基于 C++ 语言开发(并在逐步迁移到更安全的 Rust 语言)。而软件界面(UI)相关的部分,其实依旧还是网络那些(例如: XML 、JavaScript 、 JSON 、 CSS ...)。
这些与软件界面相关的设置,大部分都打包在(安装包自带的)omni.ja 文件中。如果你知晓了 omni.ja 的结构,就可以对 Firefox 的界面、快捷键等进行任意定制。 当然我也没定制过,也劝告大家尽量不要修改。如前文所述。
我和 Claude 讨论和检索后,我发现 Firefox 安装目录下确实有两个 omni.ja,位置不同,内容分工也不同:
(1)体积小的那个:在 Firefox 安装根目录下(比如 Windows 上的 Mozilla Firefox\omni.ja ,截至本文发布时为这个位置)。这个属于 Toolkit 层——是 Firefox 和其他基于同一引擎的应用(比如 Thunderbird )共享的底层组件,包含更基础的 XUL/JS 模块、通用组件。
(2)体积大的那个:在 browser 文件夹子目录下( Mozilla Firefox\browser\omni.ja ,截至本文发布时为这个位置)。这个是【 Firefox 浏览器专属】的部分,包含了浏览器主界面本身的 XHTML/JS/CSS,包括我们提到的键盘快捷键定义( browser.xhtml 里的 keyset 等 UI 相关代码)。
好。我们找到位置后具体讲解下如何修改。
简述“omni.ja”的格式
omni.ja 的扩展名是 .ja ,但它本质上是个 ZIP 压缩包——只不过不是标准 ZIP ,而是经过特殊优化压缩的变体格式,这一点在 Mozilla 官方 MDN 文档里有明确说明(该文档现已从 MDN 主站下架,但存档版本仍可查到)。
解压:(1)Linux/macOS 等 POSIX 环境下用 unzip 命令即可正常解压,官方文档确认这一点。
(2)Windows 下情况比较麻烦: Mozilla 官方建议先把扩展名从 .ja 改为 .zip,再用资源管理器自带的解压功能。要特别提醒的是, MDN 文档明确写了:大多数第三方解压工具(包括各版本 7-Zip 、WinRAR 等)可能无法正确读取 omni.ja ,因为它用了特殊的压缩优化,可能只有 Windows 【自带的】 ZIP 处理器(文件资源管理器)和 Linux 的 unzip 能正常工作,不要指望用你惯用的解压软件。
重新打包:修改完内部文件后,MDN 给出的官方打包命令是:zip -qr9XD omni.ja * 。
这几个参数【不能】随便省略或换成别的压缩方式。如果打包方式不对,轻则 Firefox 忽略你的修改(相当于白改),重则直接导致 Firefox 无法启动。Mozilla 员工 Mike Kaply 在他的技术博客里就记录过一次失败案例:他用 WinZip 重新打包后,Firefox 启动直接触发崩溃报告器——这不是危言耸听,是真实发生过的翻车案例。所以还是尽量不改。
定制“omni.ja”的注意事项:
第1条: omni.ja 内部文件数量庞大(实测一个完整版能到两千多个文件),只动你真正有把握、清楚作用的那几个文件。改坏了大概率是【无声失败】—— Firefox 直接打不开,且不会有任何报错提示你到底哪里错了。所以【留好备份】很重要。
第2条:每次改完,记得完整流程走一遍——先彻底退出 Firefox 进程(不只是关窗口),清空缓存目录,再重新启动,不然改动不生效。
第3条:上面这套“(备份)→打包→清缓存→重启”的流程,每次手动做很容易漏步骤,建议写个脚本自动化,尤其你要反复调试的时候。
第4条:omni.ja 是随 Firefox 版本一起打包发布的,每次 Firefox 更新,你的修改都会被覆盖,需要在新版本上重新操作一遍。结合第3条,更说明了自动化脚本的必要性——不是锦上添花,是长期维护这类定制的必需品。
(三) 介绍 policies.json
其实上篇博文几乎介绍完了用法,这里补充完整新手完整教程:
什么是 policies.json ?
policies.json 是 Firefox 提供的企业策略配置文件,本来是给企业 IT 管理员批量管控员工电脑用的,但普通用户一样可以用它来加固/定制自己的 Firefox。它的特点是:
(1)优先级最高:高于 Firefox 用户图形界面 GUI 设置,也高于前面讲的 about:config/user.js。一旦某项被策略锁定,用户图形界面 GUI 里对应的选项会变灰,用户无法通过界面修改。
(2)安装目录级别生效,而非单个实例 profile:同一个 Firefox 【安装目录】下,不管你建了多少个实例 profile(用户配置文件),都会读取同一份策略文件,全部生效。
存放位置:
- 找到 Firefox 的安装目录(【不是】实例 profile 目录)。如果记不清装在哪,可以在地址栏输入
about:support,回车进入后查找“应用程序二进制文件”或“安装目录”字段确认;或者右键桌面 Firefox 快捷方式→属性→查看“起始位置”。 - 在安装目录下找
distribution文件夹——这个文件夹默认【不】存在,需要你手动新建(注意是新建在安装目录下,不是实例 profile 目录下,这是最容易搞混的一步)。 - 把
policies.json文件放进这个distribution文件夹里,文件名必须精确是policies.json,区分大小写。
基本格式:
{
"policies": {
"Certificates": {
"ImportEnterpriseRoots": false
}
}
} 如果要同时配置多条策略,都放进同一个 “policies”对象里,用逗号分隔,不要重复创建多个文件——Firefox 只认安装目录下这一份 policies.json。
注:我提供的这个策略示例对应的正是 about:config 里的 security.enterprise_roots.enabled 这一项(Mozilla 官方文档明确写了两者等价)。默认情况下(即这条设为 true 或不设置,保持默认), Firefox 会读取操作系统证书库里、由用户或管理员手动添加进去的证书,并信任它们——比如企业防火墙/代理软件安装的中间人证书、某些国产杀毒软件/浏览器插件自己装进系统证书库的根证书。(我后面篇章会讲述为什么这样很危险,我为什么不信任)
设为 false 后,Firefox 不再读取/信任这些系统证书库里的“额外”证书,只信任 Firefox 自己内置维护的那一套根证书列表(Mozilla 自己审核的权威根证书 CA 列表,不是 Windows/其他系统那一套)。这也是 Firefox 更安全隐私的一部分,后面篇章我会讲述为什么。
注意:这个策略管理的是“是否导入系统证书库里的证书”,不等于“清空/替换 Firefox 内置的默认信任列表”。Firefox 自带的那些根证书(包括你可能想禁用的北京证书 Beijing CERTIFICATE AUTHORITY 之类,如果它们本来就在 Mozilla 的默认信任列表里)【不】受这条策略影响,依旧保持信任——这条策略只挡“操作系统层面被额外放进来的证书”,不负责清理 Firefox 自己出厂就带的信任列表。这两件事是分开的,给大家明确区分,不然容易让大家误以为开了这条就等于“纯净的证书信任链”,实际不是。
验证是否生效:
保存文件后,启动/重启 Firefox,在地址栏输入:about:policies ;点击左侧“已激活”,能看到你设置的策略名和当前值,就说明生效了。如果没看到,大概率是文件放错了目录层级,或者 JSON 格式写错了(比如漏了逗号、引号不对)。
(四)介绍 Arkenfox 和 Betterfox
上一小节讲完了 policies.json ,这里补充两个后面会反复用到的名词:Arkenfox 和 Betterfox。两者都不是独立的浏览器,而是一份你自己下载、放进 Firefox 配置文件目录里的 user.js 模板,本质上就是提前帮你写好了几百条 about:config 首选项的覆盖值(你有不满意的稍后我们说如何处理)。
Arkenfox :目标是在合理范围内做到“尽可能强的隐私和安全”。项目本身在 GitHub 上有详细维护的 wiki,涵盖抗指纹追踪、反追踪等大量条目。它的定位偏“开发者/技术向用户的完整参考模板”。官方自己也在文档里提醒:直接整份套用容易导致部分网站功能异常(比如登录失败、验证码加载不出来、跳转失败等),需要读文档、根据自己的使用场景手动加 user-overrides.js 做例外调整——这也是我们这几篇一直在或多或少在说的事。
Betterfox :定位更偏“性能+隐私+安全的平衡”。作者的说法是“你熟悉的浏览器,但更好”。相比 Arkenfox,它的改动更温和,较少破坏网站兼容性,适合不想频繁折腾、又想比 Firefox 默认状态更进一步的用户。
怎么选:如果你不想经常因为某个网站打不开而回头排查是哪条 pref 导致的,Betterfox 是更省心的起点;如果你追求尽可能强的隐私/抗指纹能力,并且愿意为兼容性问题花时间调试,Arkenfox 更合适。也有人是先用 Betterfox ,遇到需要更强隐私保护的场景再参考 Arkenfox 的具体条目手动补充——这也是社区里比较常见的做法,不是非此即彼的选择。你完全可以多实例嘛。
需要提醒的一点(结合我们前几篇的实测经历):不管选哪个模板,叠加自己的 user-overrides.js 之后,具体行为可能和“纯净”模板有出入——第二篇里我们记录的 Reddit 账号问题就是提醒大家不要盲目照抄任何人(包括我)的覆盖文件,任何叠加的自定义项都建议自己测试后再长期使用。
(五)我的 user-overrides.js 文件(太长,文末附)
请大家注意,这【不是】前文说的固定 about:config 的 user.js 文件,是我不满意 Arkenfox/Betterfox 的某些修改,我自己又写了此覆盖文件作为修改到我喜欢的模样。所以我更新 Arkenfox/Betterfox 的时候,我都是一个 Python 脚本,先脚本下载最新 Arkenfox/Betterfox 的 user.js ;又脚本合并,告诉我【同一个实例文件夹下的】覆盖文件和 Arkenfox/Betterfox 哪里不一样;然后脚本将覆盖文件合并到 Arkenfox/Betterfox 的user.js 。
(六) 浏览器实例( Profiles )
前面小节提到的 prefs.js、user.js ,都反复出现“位于这个【实例目录】下”这句话,这里补完“实例”到底是什么。
Firefox 官方术语叫 Profile (配置文件/配置文件夹),中文语境里很多人习惯叫“实例”。一个实例就是一个【完全独立】的 Firefox 使用环境,包含你的 Mozilla 账号、书签、历史记录、扩展、缓存,以及这个系列反复在改的 prefs.js/user.js 。它和前面讲的 policies.json(放在安装目录下,对所有实例全局生效)是两个不同层级:安装目录只有一个,但实例可以有很多个。
为什么要用多个实例:最常见的场景是隔离——工作和个人分开、多个平台账号分开测试(就像我们这几篇一直在测的 Reddit 多账号场景)、或者单纯想要一个“干净、没装任何扩展和覆盖文件”的对照环境,用来验证问题是不是你自己的定制配置导致的。
如何管理多个实例:在地址栏输入 about:profiles ,回车即可看到当前所有实例的列表、路径,以及新建/删除入口——这是最直观的图形化管理方式。
如果想同时打开多个实例(而不是每次切换),需要在启动 Firefox 时加命令行参数:firefox.exe -no-remote -P "你的实例名称"
注意此处也和 user.js 一样,为半角符号。
-P 指定用哪个实例启动,-no-remote 是关键——默认情况下 Firefox 只允许同一时间运行一个主进程,新开的窗口会被并入已有进程;加上这个参数才能让多个实例的窗口真正独立并存,互不干扰(各自的进程、各自的网络连接)。不加这个参数,直接双击图标试图开第二个 实例,大概率只会把你带回已经打开的那个。
和 Multi-Account Containers(多账户容器)扩展的区别,这个容易搞混:容器插件是在同一个实例内部,通过给不同标签页打上颜色、标记来隔离 Cookie/存储,本质上还是同一个 prefs.js、同一套底层配置、同一个浏览器指纹环境等;而多个实例是完全独立的环境,可以分别配置完全不同的 user.js/覆盖文件、甚至不同的抗指纹策略。如果你需要的是“两个环境的技术指纹本身就不同”,要用实例,【不能】只靠容器插件(但本人实测,多账户容器大部分情况下【我主观认为】隔离效果已经不输多实例了)。
/*
* ===================================================================================
* user-overrides.js - 个人Firefox配置覆盖文件 (维护版)
* ===================================================================================
* 用途:作为 Betterfox / Arkenfox 的个人覆盖层,优先保留个人功能体验。
* 宗旨:在尽量加强隐私的基础上,允许广告与遥测数据支持 Mozilla。
* 请将此文件与 更新脚本 放在同一 Firefox 配置目录中使用。
*
* 创建日期:2025年8月1日
* 修复日期:2025年8月4日 (Gemini最终修复版)
* Codex维护:2026年5月8日
* 本次维护:改名为脚本可识别的 user-overrides.js,清理重复项,移除不适合手写的 Firefox 自维护项。
* 基于:Betterfox v140 + 个人优化分析 + 广告显示修复
*/
/****************************************************************************
* 第一节:核心安全设置修改
* 这些是对Betterfox原有安全设置的重要修正
****************************************************************************/
// --- 连接安全强化 ---
//user_pref("network.cookie.cookieBehavior", 4); 修改:开启"全面Cookie保护"替代原来的严格模式 2026-07-04Claude修改为删除,因为一个完全没装 Arkenfox、什么都没改的原生 Firefox,现在默认的 network.cookie.cookieBehavior 就已经是 5 了,不需要手动改
user_pref("security.OCSP.enabled", 1); // 修改:从0改为1,开启OCSP Stapling提升安全性
user_pref("security.enterprise_roots.enabled", false); // 新增:防止自动信任企业根证书
user_pref("security.cert_pinning.enforcement_level", 2); // 新增:强制执行公钥固定
user_pref("dom.security.https_first", true); // 新增:开启HTTPS-First模式
user_pref("dom.security.https_only_mode", true); // 新增:更严格的HTTPS强制模式
// --- ECH / DoH Configuration (Intelligent Fallback Mode) ---
user_pref("network.trr.mode", 2); // 🔧 核心修正:设置为2,优先使用DoH,失败则回退到原生DNS
user_pref("network.dns.echconfig.enabled", true); // 在DoH可用时,尝试启用ECH
// --- 2026-07-04 Claude改进关于安全浏览、第三方安全检测数据流向审查 ---
user_pref("browser.safebrowsing.downloads.remote.enabled", true); // 个人选择:接受向Google查询下载文件哈希,换取恶意软件检测;极端隐私模式下应关闭,见第九节
user_pref("browser.safebrowsing.malware.enabled", true); // 显式声明:保留恶意软件本地列表比对(本地库匹配,不联网查询单个URL)
user_pref("browser.safebrowsing.phishing.enabled", true); // 显式声明:保留钓鱼网站本地列表比对(同上,风险远低于remote check)
/****************************************************************************
* 第二节:浏览器与扩展更新控制
* 个人偏好:手动控制更新时机,但保持更新检查
****************************************************************************/
user_pref("app.update.auto", false); // 新增:关闭Firefox自动安装更新
user_pref("app.update.enabled", true); // 新增:保持更新检查开启
user_pref("extensions.update.autoUpdateDefault", false); // 新增:关闭扩展自动更新
user_pref("extensions.update.enabled", true); // 新增:保持扩展更新检查
/****************************************************************************
* 第三节:最小化遥测方案修正
* 修正Betterfox的遥测设置,同时保留账号同步功能
****************************************************************************/
// --- 关键:启用广告系统必需的数据上报 ---
user_pref("datareporting.healthreport.uploadEnabled", true); // 🔧 核心修正:必须开启才能获取广告内容
user_pref("datareporting.policy.dataSubmissionEnabled", true); // 🔧 核心修正:数据提交总开关
user_pref("toolkit.telemetry.unified", true); // 新增:统一遥测开关
// --- Firefox同步服务 ---
user_pref("identity.fxaccounts.enabled", true); // 新增:开启Firefox账号功能
user_pref("services.sync.engine.bookmarks", true); // 新增:允许书签同步
user_pref("services.sync.engine.history", true); // 新增:允许历史同步
user_pref("services.sync.engine.passwords", true); // 新增:允许密码同步
user_pref("services.sync.engine.prefs", true); // 新增:允许设置同步
user_pref("services.sync.engine.tabs", true); // 新增:允许标签页同步
user_pref("services.sync.engine.addons", true); // 新增:允许扩展同步
user_pref("signon.rememberSignons", true); // 修改:开启密码管理器(原配置可能限制了此功能)
// --- 2026-07-04 Claude修改崩溃报告(同属Mozilla数据上报范畴) ---
user_pref("toolkit.crashreporter.enabled", true); // 新增:明确表态,与遥测宗旨保持一致,为开启(原为未声明状态)
/****************************************************************************
* 第四节:历史记录与会话恢复
* 个人偏好:完整保留浏览历史和会话恢复功能
****************************************************************************/
// --- 历史记录保存 ---
user_pref("places.history.enabled", true); // 新增:确保历史记录开启
user_pref("privacy.history.custom", false); // 修改:从true改为false,使用标准历史策略
user_pref("privacy.clearOnShutdown.enabled", false); // 修改:禁用关闭时清除历史
user_pref("privacy.clearOnShutdown.offlineApps", false); // 新增:不要清除离线应用数据
user_pref("privacy.clearOnShutdown.siteSettings", false); // 新增:不要清除站点设置
user_pref("privacy.sanitize.sanitizeOnShutdown", false); // 新增:关闭时不要清理
user_pref("browser.privateBrowse.autostart", false); // 新增:防止自动启动隐私模式
// --- 主页与新标签页设置 ---
user_pref("browser.startup.homepage", "about:home"); // 新增:设置默认主页
user_pref("browser.newtabpage.enabled", true); // 新增:开启新标签页
// --- 会话恢复 ---
user_pref("browser.startup.page", 3); // 新增:启动时恢复上次会话
user_pref("browser.sessionstore.enabled", true); // 新增:开启会话存储
user_pref("browser.sessionstore.resume_from_crash", true); // 新增:崩溃后恢复会话
user_pref("browser.sessionstore.max_tabs_undo", 25); // 新增:可恢复的关闭标签数量
user_pref("browser.sessionstore.max_windows_undo", 10); // 新增:可恢复的关闭窗口数量
/****************************************************************************
* 第五节:广告与建议内容(个人偏好)
* 选择允许广告和赞助内容,支持服务提供商
* 🔧 重要修复:确保设置持久化且无冲突
****************************************************************************/
// --- 基础搜索与建议设置 ---
user_pref("browser.formfill.enable", true); // 修改:从false改为true,开启表单自动填充
user_pref("browser.search.suggest.enabled", true); // 修改:从false改为true,开启搜索建议
user_pref("browser.urlbar.suggest.searches", true); // 新增:地址栏显示搜索建议
user_pref("browser.urlbar.suggest.topsites", true); // 新增:地址栏建议热门站点
user_pref("browser.urlbar.suggest.engines", true); // 新增:地址栏显示搜索引擎建议
user_pref("browser.urlbar.suggest.pocket", true); // 新增:地址栏显示Pocket建议
// --- Firefox建议与赞助内容 ---
user_pref("browser.urlbar.quicksuggest.enabled", true); // 修改:从false改为true,开启Firefox建议
user_pref("browser.urlbar.quicksuggest.sponsored", true); // 新增:允许赞助建议
user_pref("browser.urlbar.quicksuggest.nonsponsored", true); // 新增:允许非赞助建议
// --- 新标签页核心设置(去重且优化) ---
user_pref("browser.newtabpage.activity-stream.enabled", true); // [核心] 确保新标签页的"活动流"功能总开关是开启的
user_pref("browser.newtabpage.activity-stream.feeds.telemetry", true); // 🔧 关键修正1:改为true以获取Mozilla赞助内容
user_pref("browser.newtabpage.activity-stream.feeds.discoverystream", true); // [核心] 开启"发现流"服务,这是获取所有Mozilla推荐和赞助内容的必要前提
user_pref("browser.newtabpage.activity-stream.feeds.discoverystreamfeed", true); // [核心] 发现流数据源
// --- 赞助内容显示设置 ---
user_pref("browser.newtabpage.activity-stream.showSponsored", true); // [广告] 允许在新标签页上显示赞助商的故事
user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", true); // [广告] 允许在新标签页的"热门站点"区域显示赞助商网站
user_pref("browser.newtabpage.activity-stream.discoverystream.show_spocs", true); // [广告] 允许"发现流"显示赞助内容(spocs = sponsored content)
// --- 内容区域开关 ---
user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", true); // [开关] 开启"头条"区域
user_pref("browser.newtabpage.activity-stream.feeds.topsites", true); // [开关] 开启"热门站点"区域
user_pref("browser.newtabpage.activity-stream.feeds.system.topstories", true); // [系统级] 系统级头条开关
user_pref("browser.newtabpage.activity-stream.feeds.system.topsites", true); // [系统级] 系统级热门站点开关
// --- 功能推荐设置 ---
user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", true); // [建议] 开启上下文功能推荐
// --- Pocket集成 ---
user_pref("extensions.pocket.enabled", true); // 修改:从false改为true,开启Pocket功能
// --- 防止设置被重置的保护机制 ---
user_pref("browser.newtabpage.activity-stream.default.sites", ""); // 避免默认站点覆盖
user_pref("browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts", true); // 搜索快捷方式
user_pref("browser.newtabpage.activity-stream.migrationExpired", true); // 防止迁移重置
user_pref("browser.newtabpage.activity-stream.prerender", true); // 预渲染设置
user_pref("browser.newtabpage.activity-stream.debug", false); // 关闭调试模式
user_pref("browser.newtabpage.activity-stream.filterAdult", true); // 内容过滤
user_pref("browser.newtabpage.activity-stream.feeds.places", true); // Places数据库集成
/****************************************************************************
* 第六节:隐私与防指纹追踪设置
* 🔧 重要修复:平衡隐私保护与广告功能
****************************************************************************/
// --- 防指纹追踪(根据用户验证恢复) ---
user_pref("privacy.resistFingerprinting", true); // 🔧 恢复:用户验证此设置不影响广告显示
user_pref("privacy.resistFingerprinting.letterboxing", true); // 恢复:开启信箱模式
user_pref("privacy.resistFingerprinting.block_mozAddonManager", true); // 保持:阻止扩展检测
// --- 现代隐私保护 ---
user_pref("privacy.partition.network_state", true); // 新增:网络状态分区
user_pref("beacon.enabled", true); // 🔧 关键修正2:改为true以支持Mozilla内容统计
user_pref("privacy.query_stripping.enabled", true); // 新增:移除URL追踪参数
// --- 地区与语言设置(修复冲突) ---
user_pref("intl.locale.requested", "zh-CN"); // 🔧 修复:保持中文界面
user_pref("browser.search.region", "US"); // 🔧 修复:强制设定搜索区域为美国,获取更多赞助内容
user_pref("intl.accept_languages", "zh-CN, zh, zh-TW, zh-HK, en-US, en"); // 新增:语言优先级,中文优先但包含英文;2026-07-30 Claude修改:不要自己拍脑袋写这个值。已用干净、未修改的 Firefox 实例(RFP 关闭)实测出简体中文系统的真实默认值 "zh-CN, zh, zh-TW, zh-HK, en-US, en"(中间有空格),并用 EFF Cover Your Tracks 验证:约每194个浏览器中有1个是这个值(7.6 bits)。此前手写的 "zh-CN,zh,en-US,en" 缺少 zh-TW/zh-HK,是一个自造的、更独特的值,等于给自己贴了独有标签。
user_pref("browser.newtabpage.activity-stream.region", "US"); // 新增:专门为新标签页设置美国区域
user_pref("browser.urlbar.suggest.quickactions", false); // 新增:避免中文环境下的快速操作干扰
// --- 2026-07-04 Gemini补充 ---
user_pref("layout.css.font-visibility", 1); //当设置为 1 时,Firefox 会对网页隐瞒系统中的微软雅黑等大陆特有字体,网站只能探测到最基础的通用回落字体;保持开启:隐蔽宿主机大陆特有字体资产
// --- 网络与API隐私 ---
user_pref("media.peerconnection.enabled", false); // 新增:禁用WebRTC防IP泄露
user_pref("media.peerconnection.ice.default_address_only", true); // 新增:WebRTC地址限制
user_pref("geo.enabled", false); // 新增:禁用地理位置API
user_pref("dom.battery.enabled", false); // 新增:禁用电池状态API
user_pref("dom.gamepad.enabled", false); // 新增:禁用游戏手柄API
user_pref("dom.vr.enabled", false); // 新增:禁用WebVR API
user_pref("device.sensors.enabled", false); // 新增:禁用设备传感器
// --- 媒体控制 ---
user_pref("media.autoplay.default", 5); // 新增:阻止所有媒体自动播放
// --- Referer控制修改 ---
user_pref("network.http.referer.XOriginPolicy", 0); // 2026-05-09修改:从2改为0,XOriginPolicy=2会截断跨域Referer,B站API依赖Referer,会触发412错误;Arkenfox等会改为2
// --- 2026-07-04 Claude修改 ---
user_pref("network.http.referer.trimmingPolicy", 2); // 跨域时只发送 scheme+host+port,砍掉路径和查询参数;这个和 XOriginPolicy 是两个独立维度——XOriginPolicy 决定"要不要跨域发",trimmingPolicy 决定"发多少内容"。如果 B站要的只是"有没有 Referer 这个头存在"(用来做防盗链/简单来源校验),而不需要具体路径,那设置成2可能既保住B站的功能,又不会把你完整的访问路径(可能包含搜索词、内部页面结构)裸奔式发给所有跨域请求。这个值得你实际测试一下,不确定能否满足B站的校验逻辑,但值得一试,好过现在的"全发"。
// --- 2026-07-04 Claude修改window.name 跨站追踪 ---
user_pref("privacy.window.name.update.enabled", true); // 防止window.name被用作跨站无cookie追踪通道
/****************************************************************************
* 第七节:用户界面与体验优化
* 个人偏好的界面和交互设置
****************************************************************************/
// --- 标签页行为 ---
user_pref("browser.tabs.closeWindowWithLastTab", false); // 新增:关闭最后标签页时不关闭窗口
user_pref("browser.tabs.loadBookmarksInTabs", true); // 新增:书签在新标签页打开
user_pref("browser.urlbar.openintab", true); // 新增:地址栏输入在新标签页打开
user_pref("browser.link.open_newwindow", 3); // 新增:新窗口链接在新标签页打开
user_pref("browser.tabs.allowTabDetach", false); // 新增:禁用标签页拖拽分离
// --- 地址栏显示 ---
user_pref("browser.urlbar.trimURLs", false); // 修改:显示完整URL
user_pref("browser.urlbar.formatting.enabled", false); // 新增:禁用URL格式化
user_pref("browser.urlbar.autoFill", true); // 新增:开启URL自动补全
// --- 下载设置 ---
user_pref("browser.download.alwaysOpenPanel", true); // 新增:下载时自动打开下载面板
user_pref("browser.download.folderList", 2); // 新增:使用上次下载位置
// --- 界面交互 ---
user_pref("config.trim_on_minimize", true); // 新增:最小化时释放内存
user_pref("findbar.modalHighlight", true); // 新增:搜索时模态高亮
user_pref("general.smoothScroll", true); // 新增:开启平滑滚动
user_pref("browser.triple_click_selects_paragraph", false); // 新增:三击选择行而非段落
user_pref("layout.css.visited_links_enabled", false); // 新增:禁用访问链接颜色变化
user_pref("media.videocontrols.picture-in-picture.respect-disablePictureInPicture", false); // 新增:强制允许画中画
// --- 2026-07-07 Claude加入 ---
user_pref("browser.tabs.closeTabByDblclick", true); // 双击关闭标签页
user_pref("browser.tabs.closeWindowWithLastTab", false); // 关闭最后一个标签页后,窗口不退出,自动跳转到新标签页(about:newtab)
// --- Windows字体渲染优化 ---
user_pref("gfx.font_rendering.cleartype_params.cleartype_level", 100); // 新增:ClearType优化
user_pref("gfx.font_rendering.cleartype_params.enhanced_contrast", 50); // 新增:增强对比度
user_pref("gfx.font_rendering.cleartype_params.gamma", 1500); // 新增:伽马值调整
user_pref("gfx.font_rendering.cleartype_params.rendering_mode", 5); // 新增:渲染模式
user_pref("gfx.font_rendering.directwrite.enabled", true); // 新增:启用DirectWrite
// user_pref("gfx.content.azure.backends", "direct2d1.1,cairo"); // 新增:图形后端优化 新增:2026-07-30日与 Claude 实测,用 canvas.toDataURL() 直接对比字符串,发现开启 RFP 后,同一后端(skia或direct2d1.1,cairo)连续两次读取输出的base64均不同—— RFP 会对每次 Canvas 读取注入随机噪声,这是其设计机制本身,而非后端差异导致。因此无法通过单次或少量读取判断 gfx.content.azure.backends 取值是否影响指纹;该维度的随机噪声幅度掩盖了潜在的后端差异(如果存在)。如果保留 direct2d1.1,cairo,因其风险不可测,也无强证据表明比默认值 skia 更危险。但本人观点是尽量维持默认,为了融入大众。注:测试均开启禁止 Canvas 数据获取
// --- 扩展设置 ---
user_pref("extensions.webextensions.tabhide.enabled", true);
user_pref("extensions.webextensions.background-delayed-startup", true);
user_pref("extensions.webextensions.install.showOnlyPromptedAddons", true);
/****************************************************************************
* 第八节:与Betterfox的其他重要差异
* 这些是对原配置的重要修改
****************************************************************************/
// --- 核心功能确保开启 ---
user_pref("network.websocket.enabled", true); // 确保:WebSocket功能开启
user_pref("webgl.disabled", false); // 确保:WebGL功能开启;第九节有极端隐私选项
// --- 2026-07-04 Claude修改WebGL 扩展枚举收紧 ---
user_pref("webgl.disable-extensions", true); // 新增:关闭WebGL扩展枚举接口,减少显卡型号等指纹面(不影响WebGL基础功能) 新增:2026-07-30日与 Claude 实测: webgl.disable-extensions=true/false 两种状态下,用 getSupportedExtensions() 直接读取,返回的26项扩展列表完全一致,未见差异。说明该 pref 至少不影响此项最常见的JS指纹读取入口。是否影响其他更深层的 WebGL 指纹面(如具体扩展的实际调用行为),未验证,机制不确定。综合考虑:该设置目前没有实测到的隐私增益,但也没有证据表明会造成额外风险;鉴于它偏离 RFP 默认状态( false ),且收益不明确,建议删除此行,交还默认。
user_pref("dom.indexedDB.enabled", true); // 确保:IndexedDB功能开启
user_pref("javascript.enabled", true); // 确保:JavaScript功能开启
// --- 2026-05-26更新:阻止网站读写剪切板 ---
user_pref("dom.event.clipboardevents.enabled", true);// 2026-07-05 Claude更新:允许粘贴图片等富内容,恢复部分网页的粘贴图片功能
user_pref("dom.events.asyncClipboard.readText", false);
user_pref("dom.events.asyncClipboard.clipboardItem", true); // 2026-07-05 Claude更新:允许粘贴图片等富内容,恢复部分网页的粘贴图片功能
user_pref("dom.events.testing.asyncClipboard", false);
user_pref("dom.events.asyncClipboard.read", false);
/****************************************************************************
* 第九节:极端隐私 / Tor-like 预案(全部注释,默认不启用)
* 2026-05-26 Codex 添加并调整
*
* 用途:保存一组“尽可能隐私、向 Tor Browser 安全级别靠拢”的候选设置。
* 状态:本节所有 user_pref 默认都必须保持注释,不影响日常主实例。
* 使用:只建议在临时 profile、高风险网站测试、排障、或明确接受大面积坏站时逐项启用。
* 原则:不要整段取消注释。每次只启用一小组,测试常用网站,再决定是否保留。
* 警告:这些设置会严重破坏网页功能、视频会议、地图、网页编辑器、登录流程、PWA、DRM 视频等。
****************************************************************************/
// --- 9.1 最强隔离:近似“无脚本”模式 ---
// 作用:可阻止鼠标轨迹、键盘节奏、剪贴板脚本、绝大多数行为采集和动态指纹脚本。
// 代价:绝大多数现代网站会不可用;只适合临时极端 profile,不建议主实例长期启用。
// user_pref("javascript.enabled", false);
// --- 9.2 Tor-like Safer 方向:禁用 WebAssembly 与 JIT ---
// 作用:减少高性能执行环境、侧信道和浏览器引擎攻击面。
// 代价:性能下降,部分网页应用、视频站、网页游戏、复杂前端、扩展页面可能异常。
// user_pref("javascript.options.wasm", false);
// user_pref("javascript.options.asmjs", false);
// user_pref("javascript.options.ion", false);
// user_pref("javascript.options.baselinejit", false);
// user_pref("javascript.options.native_regexp", false);
// --- 9.3 图形指纹收缩:禁用或极限收缩 WebGL ---
// 作用:减少 GPU、驱动、图形能力、WebGL renderer/vendor 等指纹面。
// 代价:地图、3D、图形编辑、部分购物页面、部分视频/可视化页面可能异常。
// 注意:第八节主动开启了 webgl.disabled=false;如果将来启用这里,会以后面的设置为准。
// user_pref("webgl.disabled", true);
// user_pref("webgl.disable-extensions", true);
// user_pref("webgl.min_capability_mode", true);
// --- 9.4 后台持久化收缩:禁用 Service Workers / Push / 网页通知 ---
// 作用:减少网站后台运行、离线缓存、推送通知、PWA 持久化能力。
// 代价:PWA、网页通知、离线网页、部分登录/支付/聊天站点可能异常。
// user_pref("dom.serviceWorkers.enabled", false);
// user_pref("dom.push.enabled", false);
// user_pref("dom.webnotifications.enabled", false);
// user_pref("dom.webnotifications.serviceworker.enabled", false);
// --- 9.5 更严格 DNS 与隐式外联控制 ---
// 作用:减少系统 DNS 回退、ping 链接、Beacon 统计等隐式外联。
// 代价:network.trr.mode=3 只用 DoH,不回退系统 DNS,可能破坏内网、本地域名、公司/校园网络。
// 注意:beacon.enabled=false 会与“支持 Mozilla 广告/遥测内容统计”的宗旨冲突,只适合临时极端模式。
// user_pref("network.trr.mode", 3);
// user_pref("beacon.enabled", false);
// user_pref("browser.send_pings", false);
// user_pref("browser.safebrowsing.downloads.remote.enabled", false); //彻底关闭向谷歌查询下载文件的散列值;代价:下载恶意/被篡改文件时失去这一层检测,安全性下降,需自行用其他方式核验(如VirusTotal手动上传、本地杀软)
// --- 9.6 媒体与 DRM 收缩 ---
// 作用:避免受保护媒体模块和部分媒体能力参与网页环境。
// 代价:Netflix、部分流媒体、部分课程/版权视频无法播放。
// user_pref("media.eme.enabled", false);
// user_pref("browser.eme.ui.enabled", false);
// --- 9.7 更激进的存储/缓存收缩 ---
// 作用:进一步减少站点持久化状态和离线数据能力。
// 代价:登录状态、离线网页、复杂 Web App 可能频繁失效;与日常使用冲突较大。
// user_pref("dom.indexedDB.enabled", false);
// user_pref("browser.cache.disk.enable", false);
// user_pref("browser.cache.offline.enable", false);
// --- 9.8 进一步禁用网页 API 面 ---
// 作用:减少音频指纹、语音识别、支付请求、USB/串口/HID 等硬件或高权限 API 面。
// 代价:网页会议、语音输入、网页支付、硬件钱包/设备管理网页可能异常。
// user_pref("dom.webaudio.enabled", false);
// user_pref("media.webspeech.recognition.enable", false);
// user_pref("media.webspeech.synth.enabled", false);
// user_pref("dom.payments.request.enabled", false);
// user_pref("dom.webusb.enabled", false);
// user_pref("dom.webserial.enabled", false);
// user_pref("dom.webhid.enabled", false);
// --- 9.9 已在常规配置中启用的强硬项,不在此重复 ---
// WebRTC 已通过 media.peerconnection.enabled=false 禁用。
// 地理位置、传感器、电池、VR、游戏手柄等 API 已在第六节禁用。
// 剪贴板事件与 Async Clipboard 读取已在第八节下方的 2026-05-26 更新中禁用。
/****************************************************************************
* 配置验证标记
* 用于验证此覆盖文件是否成功加载
****************************************************************************/
user_pref("_user.js.parrot", "user-overrides.js已成功加载 - 智能回退修复版 - 2025年8月4日");




评论
发表评论