tonarchy

tonarchy

https://git.tonybtw.com/tonarchy.git git://git.tonybtw.com/tonarchy.git
82,021 bytes raw
1
/******
2
*    name: arkenfox user.js
3
*    date: 13 January 2025
4
* version: 133
5
*    urls: https://github.com/arkenfox/user.js [repo]
6
*        : https://arkenfox.github.io/gui/ [interactive]
7
* license: MIT: https://github.com/arkenfox/user.js/blob/master/LICENSE.txt
8
9
* README:
10
11
  1. Consider using Tor Browser if it meets your needs or fits your threat model
12
       * https://2019.www.torproject.org/about/torusers.html
13
  2. Read the entire wiki
14
       * https://github.com/arkenfox/user.js/wiki
15
  3. If you skipped step 2, return to step 2
16
  4. Make changes in a user-overrides.js
17
       * There are often trade-offs and conflicts between security vs privacy vs anti-tracking
18
         and these need to be balanced against functionality & convenience & breakage
19
       * Some site breakage and unintended consequences will happen. Everyone's experience will differ
20
         e.g. some user data is erased on exit (section 2800), change this to suit your needs
21
       * While not 100% definitive, search for "[SETUP" tags
22
  5. Some tag info
23
       [SETUP-SECURITY] it's one item, read it
24
            [SETUP-WEB] can cause some websites to break
25
         [SETUP-CHROME] changes how Firefox itself behaves (i.e. not directly website related)
26
  6. Override Recipes: https://github.com/arkenfox/user.js/issues/1080
27
28
* RELEASES: https://github.com/arkenfox/user.js/releases
29
30
  * Use the arkenfox release that matches your Firefox version
31
    - DON'T wait for arkenfox to update Firefox, nothing major changes these days
32
  * Each release
33
    - run prefsCleaner to reset prefs made inactive, including deprecated (9999)
34
  * ESR
35
    - It is recommended to not use the updater, or you will get a later version which may cause issues.
36
      So you should manually append your overrides (and keep a copy), and manually update when you
37
      change ESR releases (arkenfox is already past that release)
38
    - If you decide to keep updating, then the onus is on you - also see section 9999
39
40
* INDEX:
41
42
  0100: STARTUP
43
  0200: GEOLOCATION
44
  0300: QUIETER FOX
45
  0400: SAFE BROWSING
46
  0600: BLOCK IMPLICIT OUTBOUND
47
  0700: DNS / DoH / PROXY / SOCKS
48
  0800: LOCATION BAR / SEARCH BAR / SUGGESTIONS / HISTORY / FORMS
49
  0900: PASSWORDS
50
  1000: DISK AVOIDANCE
51
  1200: HTTPS (SSL/TLS / OCSP / CERTS / HPKP)
52
  1600: REFERERS
53
  1700: CONTAINERS
54
  2000: PLUGINS / MEDIA / WEBRTC
55
  2400: DOM (DOCUMENT OBJECT MODEL)
56
  2600: MISCELLANEOUS
57
  2700: ETP (ENHANCED TRACKING PROTECTION)
58
  2800: SHUTDOWN & SANITIZING
59
  4000: FPP (fingerprintingProtection)
60
  4500: OPTIONAL RFP (resistFingerprinting)
61
  5000: OPTIONAL OPSEC
62
  5500: OPTIONAL HARDENING
63
  6000: DON'T TOUCH
64
  7000: DON'T BOTHER
65
  8000: DON'T BOTHER: FINGERPRINTING
66
  9000: NON-PROJECT RELATED
67
  9999: DEPRECATED / RENAMED
68
69
******/
70
71
/* START: internal custom pref to test for syntax errors
72
 * [NOTE] Not all syntax errors cause parsing to abort i.e. reaching the last debug pref
73
 * no longer necessarily means that all prefs have been applied. Check the console right
74
 * after startup for any warnings/error messages related to non-applied prefs
75
 * [1] https://blog.mozilla.org/nnethercote/2018/03/09/a-new-preferences-parser-for-firefox/ ***/
76
user_pref("_user.js.parrot", "START: Oh yes, the Norwegian Blue... what's wrong with it?");
77
78
/* 0000: disable about:config warning ***/
79
user_pref("browser.aboutConfig.showWarning", false);
80
81
/*** [SECTION 0100]: STARTUP ***/
82
user_pref("_user.js.parrot", "0100 syntax error: the parrot's dead!");
83
/* 0102: set startup page [SETUP-CHROME]
84
 * 0=blank, 1=home, 2=last visited page, 3=resume previous session
85
 * [NOTE] Session Restore is cleared with history (2811), and not used in Private Browsing mode
86
 * [SETTING] General>Startup>Restore previous session ***/
87
user_pref("browser.startup.page", 0);
88
/* 0103: set HOME+NEWWINDOW page
89
 * about:home=Firefox Home (default, see 0105), custom URL, about:blank
90
 * [SETTING] Home>New Windows and Tabs>Homepage and new windows ***/
91
user_pref("browser.startup.homepage", "about:blank");
92
/* 0104: set NEWTAB page
93
 * true=Firefox Home (default, see 0105), false=blank page
94
 * [SETTING] Home>New Windows and Tabs>New tabs ***/
95
user_pref("browser.newtabpage.enabled", false);
96
/* 0105: disable sponsored content on Firefox Home (Activity Stream)
97
 * [SETTING] Home>Firefox Home Content ***/
98
user_pref("browser.newtabpage.activity-stream.showSponsored", false); // [FF58+]
99
user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false); // [FF83+] Shortcuts>Sponsored shortcuts
100
/* 0106: clear default topsites
101
 * [NOTE] This does not block you from adding your own ***/
102
user_pref("browser.newtabpage.activity-stream.default.sites", "");
103
104
/*** [SECTION 0200]: GEOLOCATION ***/
105
user_pref("_user.js.parrot", "0200 syntax error: the parrot's definitely deceased!");
106
/* 0202: disable using the OS's geolocation service ***/
107
user_pref("geo.provider.ms-windows-location", false); // [WINDOWS]
108
user_pref("geo.provider.use_corelocation", false); // [MAC]
109
user_pref("geo.provider.use_geoclue", false); // [FF102+] [LINUX]
110
111
/*** [SECTION 0300]: QUIETER FOX ***/
112
user_pref("_user.js.parrot", "0300 syntax error: the parrot's not pinin' for the fjords!");
113
/** RECOMMENDATIONS ***/
114
/* 0320: disable recommendation pane in about:addons (uses Google Analytics) ***/
115
user_pref("extensions.getAddons.showPane", false); // [HIDDEN PREF]
116
/* 0321: disable recommendations in about:addons' Extensions and Themes panes [FF68+] ***/
117
user_pref("extensions.htmlaboutaddons.recommendations.enabled", false);
118
/* 0322: disable personalized Extension Recommendations in about:addons and AMO [FF65+]
119
 * [NOTE] This pref has no effect when Health Reports (0331) are disabled
120
 * [SETTING] Privacy & Security>Firefox Data Collection & Use>Allow Firefox to make personalized extension recommendations
121
 * [1] https://support.mozilla.org/kb/personalized-extension-recommendations ***/
122
user_pref("browser.discovery.enabled", false);
123
/* 0323: disable shopping experience [FF116+]
124
 * [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1840156#c0 ***/
125
user_pref("browser.shopping.experience2023.enabled", false); // [DEFAULT: false]
126
127
/** TELEMETRY ***/
128
/* 0330: disable new data submission [FF41+]
129
 * If disabled, no policy is shown or upload takes place, ever
130
 * [1] https://bugzilla.mozilla.org/1195552 ***/
131
user_pref("datareporting.policy.dataSubmissionEnabled", false);
132
/* 0331: disable Health Reports
133
 * [SETTING] Privacy & Security>Firefox Data Collection & Use>Allow Firefox to send technical... data ***/
134
user_pref("datareporting.healthreport.uploadEnabled", false);
135
/* 0332: disable telemetry
136
 * The "unified" pref affects the behavior of the "enabled" pref
137
 * - If "unified" is false then "enabled" controls the telemetry module
138
 * - If "unified" is true then "enabled" only controls whether to record extended data
139
 * [NOTE] "toolkit.telemetry.enabled" is now LOCKED to reflect prerelease (true) or release builds (false) [2]
140
 * [1] https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/telemetry/internals/preferences.html
141
 * [2] https://medium.com/georg-fritzsche/data-preference-changes-in-firefox-58-2d5df9c428b5 ***/
142
user_pref("toolkit.telemetry.unified", false);
143
user_pref("toolkit.telemetry.enabled", false); // see [NOTE]
144
user_pref("toolkit.telemetry.server", "data:,");
145
user_pref("toolkit.telemetry.archive.enabled", false);
146
user_pref("toolkit.telemetry.newProfilePing.enabled", false); // [FF55+]
147
user_pref("toolkit.telemetry.shutdownPingSender.enabled", false); // [FF55+]
148
user_pref("toolkit.telemetry.updatePing.enabled", false); // [FF56+]
149
user_pref("toolkit.telemetry.bhrPing.enabled", false); // [FF57+] Background Hang Reporter
150
user_pref("toolkit.telemetry.firstShutdownPing.enabled", false); // [FF57+]
151
/* 0333: disable Telemetry Coverage
152
 * [1] https://blog.mozilla.org/data/2018/08/20/effectively-measuring-search-in-firefox/ ***/
153
user_pref("toolkit.telemetry.coverage.opt-out", true); // [HIDDEN PREF]
154
user_pref("toolkit.coverage.opt-out", true); // [FF64+] [HIDDEN PREF]
155
user_pref("toolkit.coverage.endpoint.base", "");
156
/* 0335: disable Firefox Home (Activity Stream) telemetry ***/
157
user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
158
user_pref("browser.newtabpage.activity-stream.telemetry", false);
159
160
/** STUDIES ***/
161
/* 0340: disable Studies
162
 * [SETTING] Privacy & Security>Firefox Data Collection & Use>Allow Firefox to install and run studies ***/
163
user_pref("app.shield.optoutstudies.enabled", false);
164
/* 0341: disable Normandy/Shield [FF60+]
165
 * Shield is a telemetry system that can push and test "recipes"
166
 * [1] https://mozilla.github.io/normandy/ ***/
167
user_pref("app.normandy.enabled", false);
168
user_pref("app.normandy.api_url", "");
169
170
/** CRASH REPORTS ***/
171
/* 0350: disable Crash Reports ***/
172
user_pref("breakpad.reportURL", "");
173
user_pref("browser.tabs.crashReporting.sendReport", false); // [FF44+]
174
   // user_pref("browser.crashReports.unsubmittedCheck.enabled", false); // [FF51+] [DEFAULT: false]
175
/* 0351: enforce no submission of backlogged Crash Reports [FF58+]
176
 * [SETTING] Privacy & Security>Firefox Data Collection & Use>Allow Firefox to send backlogged crash reports  ***/
177
user_pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false); // [DEFAULT: false]
178
179
/** OTHER ***/
180
/* 0360: disable Captive Portal detection
181
 * [1] https://www.eff.org/deeplinks/2017/08/how-captive-portals-interfere-wireless-security-and-privacy ***/
182
user_pref("captivedetect.canonicalURL", "");
183
user_pref("network.captive-portal-service.enabled", false); // [FF52+]
184
/* 0361: disable Network Connectivity checks [FF65+]
185
 * [1] https://bugzilla.mozilla.org/1460537 ***/
186
user_pref("network.connectivity-service.enabled", false);
187
188
/*** [SECTION 0400]: SAFE BROWSING (SB)
189
   SB has taken many steps to preserve privacy. If required, a full url is never sent
190
   to Google, only a part-hash of the prefix, hidden with noise of other real part-hashes.
191
   Firefox takes measures such as stripping out identifying parameters and since SBv4 (FF57+)
192
   doesn't even use cookies. (#Turn on browser.safebrowsing.debug to monitor this activity)
193
194
   [1] https://feeding.cloud.geek.nz/posts/how-safe-browsing-works-in-firefox/
195
   [2] https://wiki.mozilla.org/Security/Safe_Browsing
196
   [3] https://support.mozilla.org/kb/how-does-phishing-and-malware-protection-work
197
   [4] https://educatedguesswork.org/posts/safe-browsing-privacy/
198
***/
199
user_pref("_user.js.parrot", "0400 syntax error: the parrot's passed on!");
200
/* 0401: disable SB (Safe Browsing)
201
 * [WARNING] Do this at your own risk! These are the master switches
202
 * [SETTING] Privacy & Security>Security>... Block dangerous and deceptive content ***/
203
   // user_pref("browser.safebrowsing.malware.enabled", false);
204
   // user_pref("browser.safebrowsing.phishing.enabled", false);
205
/* 0402: disable SB checks for downloads (both local lookups + remote)
206
 * This is the master switch for the safebrowsing.downloads* prefs (0403, 0404)
207
 * [SETTING] Privacy & Security>Security>... "Block dangerous downloads" ***/
208
   // user_pref("browser.safebrowsing.downloads.enabled", false);
209
/* 0403: disable SB checks for downloads (remote)
210
 * To verify the safety of certain executable files, Firefox may submit some information about the
211
 * file, including the name, origin, size and a cryptographic hash of the contents, to the Google
212
 * Safe Browsing service which helps Firefox determine whether or not the file should be blocked
213
 * [SETUP-SECURITY] If you do not understand this, or you want this protection, then override this ***/
214
user_pref("browser.safebrowsing.downloads.remote.enabled", false);
215
   // user_pref("browser.safebrowsing.downloads.remote.url", ""); // Defense-in-depth
216
/* 0404: disable SB checks for unwanted software
217
 * [SETTING] Privacy & Security>Security>... "Warn you about unwanted and uncommon software" ***/
218
   // user_pref("browser.safebrowsing.downloads.remote.block_potentially_unwanted", false);
219
   // user_pref("browser.safebrowsing.downloads.remote.block_uncommon", false);
220
/* 0405: disable "ignore this warning" on SB warnings [FF45+]
221
 * If clicked, it bypasses the block for that session. This is a means for admins to enforce SB
222
 * [TEST] see https://github.com/arkenfox/user.js/wiki/Appendix-A-Test-Sites#-mozilla
223
 * [1] https://bugzilla.mozilla.org/1226490 ***/
224
   // user_pref("browser.safebrowsing.allowOverride", false);
225
226
/*** [SECTION 0600]: BLOCK IMPLICIT OUTBOUND [not explicitly asked for - e.g. clicked on] ***/
227
user_pref("_user.js.parrot", "0600 syntax error: the parrot's no more!");
228
/* 0601: disable link prefetching
229
 * [1] https://developer.mozilla.org/docs/Web/HTTP/Link_prefetching_FAQ ***/
230
user_pref("network.prefetch-next", false);
231
/* 0602: disable DNS prefetching
232
 * [1] https://developer.mozilla.org/docs/Web/HTTP/Headers/X-DNS-Prefetch-Control ***/
233
user_pref("network.dns.disablePrefetch", true);
234
user_pref("network.dns.disablePrefetchFromHTTPS", true);
235
/* 0603: disable predictor / prefetching ***/
236
user_pref("network.predictor.enabled", false);
237
user_pref("network.predictor.enable-prefetch", false); // [FF48+] [DEFAULT: false]
238
/* 0604: disable link-mouseover opening connection to linked server
239
 * [1] https://news.slashdot.org/story/15/08/14/2321202/how-to-quash-firefoxs-silent-requests ***/
240
user_pref("network.http.speculative-parallel-limit", 0);
241
/* 0605: disable mousedown speculative connections on bookmarks and history [FF98+] ***/
242
user_pref("browser.places.speculativeConnect.enabled", false);
243
/* 0610: enforce no "Hyperlink Auditing" (click tracking)
244
 * [1] https://www.bleepingcomputer.com/news/software/major-browsers-to-prevent-disabling-of-click-tracking-privacy-risk/ ***/
245
   // user_pref("browser.send_pings", false); // [DEFAULT: false]
246
247
/*** [SECTION 0700]: DNS / DoH / PROXY / SOCKS ***/
248
user_pref("_user.js.parrot", "0700 syntax error: the parrot's given up the ghost!");
249
/* 0702: set the proxy server to do any DNS lookups when using SOCKS
250
 * e.g. in Tor, this stops your local DNS server from knowing your Tor destination
251
 * as a remote Tor node will handle the DNS request
252
 * [1] https://trac.torproject.org/projects/tor/wiki/doc/TorifyHOWTO/WebBrowsers ***/
253
user_pref("network.proxy.socks_remote_dns", true);
254
/* 0703: disable using UNC (Uniform Naming Convention) paths [FF61+]
255
 * [SETUP-CHROME] Can break extensions for profiles on network shares
256
 * [1] https://bugzilla.mozilla.org/1413868 ***/
257
user_pref("network.file.disable_unc_paths", true); // [HIDDEN PREF]
258
/* 0704: disable GIO as a potential proxy bypass vector
259
 * Gvfs/GIO has a set of supported protocols like obex, network, archive, computer,
260
 * dav, cdda, gphoto2, trash, etc. From FF87-117, by default only sftp was accepted
261
 * [1] https://bugzilla.mozilla.org/1433507
262
 * [2] https://en.wikipedia.org/wiki/GVfs
263
 * [3] https://en.wikipedia.org/wiki/GIO_(software) ***/
264
user_pref("network.gio.supported-protocols", ""); // [HIDDEN PREF] [DEFAULT: "" FF118+]
265
/* 0705: disable proxy direct failover for system requests [FF91+]
266
 * [WARNING] Default true is a security feature against malicious extensions [1]
267
 * [SETUP-CHROME] If you use a proxy and you trust your extensions
268
 * [1] https://blog.mozilla.org/security/2021/10/25/securing-the-proxy-api-for-firefox-add-ons/ ***/
269
   // user_pref("network.proxy.failover_direct", false);
270
/* 0706: disable proxy bypass for system request failures [FF95+]
271
 * RemoteSettings, UpdateService, Telemetry [1]
272
 * [WARNING] If false, this will break the fallback for some security features
273
 * [SETUP-CHROME] If you use a proxy and you understand the security impact
274
 * [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1732792,1733994,1733481 ***/
275
   // user_pref("network.proxy.allow_bypass", false);
276
/* 0710: enable DNS-over-HTTPS (DoH) [FF60+]
277
 * 0=default, 2=increased (TRR (Trusted Recursive Resolver) first), 3=max (TRR only), 5=off (no rollout)
278
 * see "doh-rollout.home-region": USA 2019, Canada 2021, Russia/Ukraine 2022 [3]
279
 * [SETTING] Privacy & Security>DNS over HTTPS
280
 * [1] https://hacks.mozilla.org/2018/05/a-cartoon-intro-to-dns-over-https/
281
 * [2] https://wiki.mozilla.org/Security/DOH-resolver-policy
282
 * [3] https://support.mozilla.org/kb/firefox-dns-over-https
283
 * [4] https://www.eff.org/deeplinks/2020/12/dns-doh-and-odoh-oh-my-year-review-2020 ***/
284
   // user_pref("network.trr.mode", 3);
285
/* 0712: set DoH provider
286
 * The custom uri is the value shown when you "Choose provider>Custom>"
287
 * [NOTE] If you USE custom then "network.trr.uri" should be set the same
288
 * [SETTING] Privacy & Security>DNS over HTTPS>Increased/Max>Choose provider ***/
289
   // user_pref("network.trr.uri", "https://example.dns");
290
   // user_pref("network.trr.custom_uri", "https://example.dns");
291
292
/*** [SECTION 0800]: LOCATION BAR / SEARCH BAR / SUGGESTIONS / HISTORY / FORMS ***/
293
user_pref("_user.js.parrot", "0800 syntax error: the parrot's ceased to be!");
294
/* 0801: disable location bar making speculative connections [FF56+]
295
 * [1] https://bugzilla.mozilla.org/1348275 ***/
296
user_pref("browser.urlbar.speculativeConnect.enabled", false);
297
/* 0802: disable location bar contextual suggestions
298
 * [NOTE] The UI is controlled by the .enabled pref
299
 * [SETTING] Search>Address Bar>Suggestions from...
300
 * [1] https://blog.mozilla.org/data/2021/09/15/data-and-firefox-suggest/ ***/
301
user_pref("browser.urlbar.quicksuggest.enabled", false); // [FF92+]
302
user_pref("browser.urlbar.suggest.quicksuggest.nonsponsored", false); // [FF95+]
303
user_pref("browser.urlbar.suggest.quicksuggest.sponsored", false); // [FF92+]
304
/* 0803: disable live search suggestions
305
 * [NOTE] Both must be true for live search to work in the location bar
306
 * [SETUP-CHROME] Override these if you trust and use a privacy respecting search engine
307
 * [SETTING] Search>Show search suggestions | Show search suggestions in address bar results ***/
308
user_pref("browser.search.suggest.enabled", false);
309
user_pref("browser.urlbar.suggest.searches", false);
310
/* 0805: disable urlbar trending search suggestions [FF118+]
311
 * [SETTING] Search>Search Suggestions>Show trending search suggestions (FF119) ***/
312
user_pref("browser.urlbar.trending.featureGate", false);
313
/* 0806: disable urlbar suggestions ***/
314
user_pref("browser.urlbar.addons.featureGate", false); // [FF115+]
315
user_pref("browser.urlbar.fakespot.featureGate", false); // [FF130+] [DEFAULT: false]
316
user_pref("browser.urlbar.mdn.featureGate", false); // [FF117+] [HIDDEN PREF]
317
user_pref("browser.urlbar.pocket.featureGate", false); // [FF116+] [DEFAULT: false]
318
user_pref("browser.urlbar.weather.featureGate", false); // [FF108+] [DEFAULT: false]
319
user_pref("browser.urlbar.yelp.featureGate", false); // [FF124+]
320
/* 0807: disable urlbar clipboard suggestions [FF118+] ***/
321
   // user_pref("browser.urlbar.clipboard.featureGate", false);
322
/* 0808: disable recent searches [FF120+]
323
 * [NOTE] Recent searches are cleared with history (2811)
324
 * [1] https://support.mozilla.org/kb/search-suggestions-firefox ***/
325
   // user_pref("browser.urlbar.recentsearches.featureGate", false);
326
/* 0810: disable search and form history
327
 * [NOTE] We also clear formdata on exit (2811)
328
 * [SETUP-WEB] Be aware that autocomplete form data can be read by third parties [1][2]
329
 * [SETTING] Privacy & Security>History>Custom Settings>Remember search and form history
330
 * [1] https://blog.mindedsecurity.com/2011/10/autocompleteagain.html
331
 * [2] https://bugzilla.mozilla.org/381681 ***/
332
user_pref("browser.formfill.enable", false);
333
/* 0815: disable tab-to-search [FF85+]
334
 * Alternatively, you can exclude on a per-engine basis by unchecking them in Options>Search
335
 * [SETTING] Search>Address Bar>When using the address bar, suggest>Search engines ***/
336
   // user_pref("browser.urlbar.suggest.engines", false);
337
/* 0820: disable coloring of visited links
338
 * [SETUP-HARDEN] Bulk rapid history sniffing was mitigated in 2010 [1][2]. Slower and more expensive
339
 * redraw timing attacks were largely mitigated in FF77+ [3]. Using RFP (4501) further hampers timing
340
 * attacks. Don't forget clearing history on exit (2811). However, social engineering [2#limits][4][5]
341
 * and advanced targeted timing attacks could still produce usable results
342
 * [1] https://developer.mozilla.org/docs/Web/CSS/Privacy_and_the_:visited_selector
343
 * [2] https://dbaron.org/mozilla/visited-privacy
344
 * [3] https://bugzilla.mozilla.org/1632765
345
 * [4] https://earthlng.github.io/testpages/visited_links.html (see github wiki APPENDIX A on how to use)
346
 * [5] https://lcamtuf.blogspot.com/2016/08/css-mix-blend-mode-is-bad-for-keeping.html ***/
347
   // user_pref("layout.css.visited_links_enabled", false);
348
/* 0830: enable separate default search engine in Private Windows and its UI setting
349
 * [SETTING] Search>Default Search Engine>Choose a different default search engine for Private Windows only ***/
350
user_pref("browser.search.separatePrivateDefault", true); // [FF70+]
351
user_pref("browser.search.separatePrivateDefault.ui.enabled", true); // [FF71+]
352
353
/*** [SECTION 0900]: PASSWORDS
354
   [1] https://support.mozilla.org/kb/use-primary-password-protect-stored-logins-and-pas
355
***/
356
user_pref("_user.js.parrot", "0900 syntax error: the parrot's expired!");
357
/* 0903: disable auto-filling username & password form fields
358
 * can leak in cross-site forms *and* be spoofed
359
 * [NOTE] Username & password is still available when you enter the field
360
 * [SETTING] Privacy & Security>Logins and Passwords>Autofill logins and passwords
361
 * [1] https://freedom-to-tinker.com/2017/12/27/no-boundaries-for-user-identities-web-trackers-exploit-browser-login-managers/
362
 * [2] https://homes.esat.kuleuven.be/~asenol/leaky-forms/ ***/
363
user_pref("signon.autofillForms", false);
364
/* 0904: disable formless login capture for Password Manager [FF51+] ***/
365
user_pref("signon.formlessCapture.enabled", false);
366
/* 0905: limit (or disable) HTTP authentication credentials dialogs triggered by sub-resources [FF41+]
367
 * hardens against potential credentials phishing
368
 * 0 = don't allow sub-resources to open HTTP authentication credentials dialogs
369
 * 1 = don't allow cross-origin sub-resources to open HTTP authentication credentials dialogs
370
 * 2 = allow sub-resources to open HTTP authentication credentials dialogs (default) ***/
371
user_pref("network.auth.subresource-http-auth-allow", 1);
372
/* 0906: enforce no automatic authentication on Microsoft sites [FF91+] [WINDOWS 10+]
373
 * [SETTING] Privacy & Security>Logins and Passwords>Allow Windows single sign-on for...
374
 * [1] https://support.mozilla.org/kb/windows-sso ***/
375
   // user_pref("network.http.windows-sso.enabled", false); // [DEFAULT: false]
376
/* 0907: enforce no automatic authentication on Microsoft sites [FF131+] [MAC]
377
 * On macOS, SSO only works on corporate devices ***/
378
   // user_pref("network.http.microsoft-entra-sso.enabled", false); // [DEFAULT: false]
379
380
/*** [SECTION 1000]: DISK AVOIDANCE ***/
381
user_pref("_user.js.parrot", "1000 syntax error: the parrot's gone to meet 'is maker!");
382
/* 1001: disable disk cache
383
 * [NOTE] We also clear cache on exit (2811)
384
 * [SETUP-CHROME] If you think disk cache helps perf, then feel free to override this ***/
385
user_pref("browser.cache.disk.enable", false);
386
/* 1002: set media cache in Private Browsing to in-memory and increase its maximum size
387
 * [NOTE] MSE (Media Source Extensions) are already stored in-memory in PB ***/
388
user_pref("browser.privatebrowsing.forceMediaMemoryCache", true); // [FF75+]
389
user_pref("media.memory_cache_max_size", 65536);
390
/* 1003: disable storing extra session data [SETUP-CHROME]
391
 * define on which sites to save extra session data such as form content, cookies and POST data
392
 * 0=everywhere, 1=unencrypted sites, 2=nowhere ***/
393
user_pref("browser.sessionstore.privacy_level", 2);
394
/* 1005: disable automatic Firefox start and session restore after reboot [FF62+] [WINDOWS]
395
 * [1] https://bugzilla.mozilla.org/603903 ***/
396
user_pref("toolkit.winRegisterApplicationRestart", false);
397
/* 1006: disable favicons in shortcuts [WINDOWS]
398
 * URL shortcuts use a cached randomly named .ico file which is stored in your
399
 * profile/shortcutCache directory. The .ico remains after the shortcut is deleted
400
 * If set to false then the shortcuts use a generic Firefox icon ***/
401
user_pref("browser.shell.shortcutFavicons", false);
402
403
/*** [SECTION 1200]: HTTPS (SSL/TLS / OCSP / CERTS / HPKP)
404
   Your cipher and other settings can be used in server side fingerprinting
405
   [TEST] https://www.ssllabs.com/ssltest/viewMyClient.html
406
   [TEST] https://browserleaks.com/ssl
407
   [TEST] https://ja3er.com/
408
   [1] https://www.securityartwork.es/2017/02/02/tls-client-fingerprinting-with-bro/
409
***/
410
user_pref("_user.js.parrot", "1200 syntax error: the parrot's a stiff!");
411
/** SSL (Secure Sockets Layer) / TLS (Transport Layer Security) ***/
412
/* 1201: require safe negotiation
413
 * Blocks connections to servers that don't support RFC 5746 [2] as they're potentially vulnerable to a
414
 * MiTM attack [3]. A server without RFC 5746 can be safe from the attack if it disables renegotiations
415
 * but the problem is that the browser can't know that. Setting this pref to true is the only way for the
416
 * browser to ensure there will be no unsafe renegotiations on the channel between the browser and the server
417
 * [SETUP-WEB] SSL_ERROR_UNSAFE_NEGOTIATION: is it worth overriding this for that one site?
418
 * [STATS] SSL Labs (May 2024) reports over 99.7% of top sites have secure renegotiation [4]
419
 * [1] https://wiki.mozilla.org/Security:Renegotiation
420
 * [2] https://datatracker.ietf.org/doc/html/rfc5746
421
 * [3] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3555
422
 * [4] https://www.ssllabs.com/ssl-pulse/ ***/
423
user_pref("security.ssl.require_safe_negotiation", true);
424
/* 1206: disable TLS1.3 0-RTT (round-trip time) [FF51+]
425
 * This data is not forward secret, as it is encrypted solely under keys derived using
426
 * the offered PSK. There are no guarantees of non-replay between connections
427
 * [1] https://github.com/tlswg/tls13-spec/issues/1001
428
 * [2] https://www.rfc-editor.org/rfc/rfc9001.html#name-replay-attacks-with-0-rtt
429
 * [3] https://blog.cloudflare.com/tls-1-3-overview-and-q-and-a/ ***/
430
user_pref("security.tls.enable_0rtt_data", false);
431
432
/** OCSP (Online Certificate Status Protocol)
433
   [1] https://scotthelme.co.uk/revocation-is-broken/
434
   [2] https://blog.mozilla.org/security/2013/07/29/ocsp-stapling-in-firefox/
435
***/
436
/* 1211: enforce OCSP fetching to confirm current validity of certificates
437
 * 0=disabled, 1=enabled (default), 2=enabled for EV certificates only
438
 * OCSP (non-stapled) leaks information about the sites you visit to the CA (cert authority)
439
 * It's a trade-off between security (checking) and privacy (leaking info to the CA)
440
 * [NOTE] This pref only controls OCSP fetching and does not affect OCSP stapling
441
 * [SETTING] Privacy & Security>Security>Certificates>Query OCSP responder servers...
442
 * [1] https://en.wikipedia.org/wiki/Ocsp ***/
443
user_pref("security.OCSP.enabled", 1); // [DEFAULT: 1]
444
/* 1212: set OCSP fetch failures (non-stapled, see 1211) to hard-fail
445
 * [SETUP-WEB] SEC_ERROR_OCSP_SERVER_ERROR
446
 * When a CA cannot be reached to validate a cert, Firefox just continues the connection (=soft-fail)
447
 * Setting this pref to true tells Firefox to instead terminate the connection (=hard-fail)
448
 * It is pointless to soft-fail when an OCSP fetch fails: you cannot confirm a cert is still valid (it
449
 * could have been revoked) and/or you could be under attack (e.g. malicious blocking of OCSP servers)
450
 * [1] https://blog.mozilla.org/security/2013/07/29/ocsp-stapling-in-firefox/
451
 * [2] https://www.imperialviolet.org/2014/04/19/revchecking.html ***/
452
user_pref("security.OCSP.require", true);
453
454
/** CERTS / HPKP (HTTP Public Key Pinning) ***/
455
/* 1223: enable strict PKP (Public Key Pinning)
456
 * 0=disabled, 1=allow user MiTM (default; such as your antivirus), 2=strict
457
 * [SETUP-WEB] MOZILLA_PKIX_ERROR_KEY_PINNING_FAILURE ***/
458
user_pref("security.cert_pinning.enforcement_level", 2);
459
/* 1224: enable CRLite [FF73+]
460
 * 0 = disabled
461
 * 1 = consult CRLite but only collect telemetry
462
 * 2 = consult CRLite and enforce both "Revoked" and "Not Revoked" results
463
 * 3 = consult CRLite and enforce "Not Revoked" results, but defer to OCSP for "Revoked" (default)
464
 * [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1429800,1670985,1753071
465
 * [2] https://blog.mozilla.org/security/tag/crlite/ ***/
466
user_pref("security.remote_settings.crlite_filters.enabled", true);
467
user_pref("security.pki.crlite_mode", 2);
468
469
/** MIXED CONTENT ***/
470
/* 1241: disable insecure passive content (such as images) on https pages ***/
471
   // user_pref("security.mixed_content.block_display_content", true); // Defense-in-depth (see 1244)
472
/* 1244: enable HTTPS-Only mode in all windows
473
 * When the top-level is HTTPS, insecure subresources are also upgraded (silent fail)
474
 * [SETTING] to add site exceptions: Padlock>HTTPS-Only mode>On (after "Continue to HTTP Site")
475
 * [SETTING] Privacy & Security>HTTPS-Only Mode (and manage exceptions)
476
 * [TEST] http://example.com [upgrade]
477
 * [TEST] http://httpforever.com/ | http://http.rip [no upgrade] ***/
478
user_pref("dom.security.https_only_mode", true); // [FF76+]
479
   // user_pref("dom.security.https_only_mode_pbm", true); // [FF80+]
480
/* 1245: enable HTTPS-Only mode for local resources [FF77+] ***/
481
   // user_pref("dom.security.https_only_mode.upgrade_local", true);
482
/* 1246: disable HTTP background requests [FF82+]
483
 * When attempting to upgrade, if the server doesn't respond within 3 seconds, Firefox sends
484
 * a top-level HTTP request without path in order to check if the server supports HTTPS or not
485
 * This is done to avoid waiting for a timeout which takes 90 seconds
486
 * [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1642387,1660945 ***/
487
user_pref("dom.security.https_only_mode_send_http_background_request", false);
488
489
/** UI (User Interface) ***/
490
/* 1270: display warning on the padlock for "broken security" (if 1201 is false)
491
 * Bug: warning padlock not indicated for subresources on a secure page! [2]
492
 * [1] https://wiki.mozilla.org/Security:Renegotiation
493
 * [2] https://bugzilla.mozilla.org/1353705 ***/
494
user_pref("security.ssl.treat_unsafe_negotiation_as_broken", true);
495
/* 1272: display advanced information on Insecure Connection warning pages
496
 * only works when it's possible to add an exception
497
 * i.e. it doesn't work for HSTS discrepancies (https://subdomain.preloaded-hsts.badssl.com/)
498
 * [TEST] https://expired.badssl.com/ ***/
499
user_pref("browser.xul.error_pages.expert_bad_cert", true);
500
501
/*** [SECTION 1600]: REFERERS
502
                  full URI: https://example.com:8888/foo/bar.html?id=1234
503
     scheme+host+port+path: https://example.com:8888/foo/bar.html
504
          scheme+host+port: https://example.com:8888
505
   [1] https://feeding.cloud.geek.nz/posts/tweaking-referrer-for-privacy-in-firefox/
506
***/
507
user_pref("_user.js.parrot", "1600 syntax error: the parrot rests in peace!");
508
/* 1602: control the amount of cross-origin information to send [FF52+]
509
 * 0=send full URI (default), 1=scheme+host+port+path, 2=scheme+host+port ***/
510
user_pref("network.http.referer.XOriginTrimmingPolicy", 2);
511
512
/*** [SECTION 1700]: CONTAINERS ***/
513
user_pref("_user.js.parrot", "1700 syntax error: the parrot's bit the dust!");
514
/* 1701: enable Container Tabs and its UI setting [FF50+]
515
 * [SETTING] General>Tabs>Enable Container Tabs
516
 * https://wiki.mozilla.org/Security/Contextual_Identity_Project/Containers ***/
517
user_pref("privacy.userContext.enabled", true);
518
user_pref("privacy.userContext.ui.enabled", true);
519
/* 1702: set behavior on "+ Tab" button to display container menu on left click [FF74+]
520
 * [NOTE] The menu is always shown on long press and right click
521
 * [SETTING] General>Tabs>Enable Container Tabs>Settings>Select a container for each new tab ***/
522
   // user_pref("privacy.userContext.newTabContainerOnLeftClick.enabled", true);
523
/* 1703: set external links to open in site-specific containers [FF123+]
524
 * [SETUP-WEB] Depending on your container extension(s) and their settings
525
 * true=Firefox will not choose a container (so your extension can)
526
 * false=Firefox will choose the container/no-container (default)
527
 * [1] https://bugzilla.mozilla.org/1874599 ***/
528
   // user_pref("browser.link.force_default_user_context_id_for_external_opens", true);
529
530
/*** [SECTION 2000]: PLUGINS / MEDIA / WEBRTC ***/
531
user_pref("_user.js.parrot", "2000 syntax error: the parrot's snuffed it!");
532
/* 2002: force WebRTC inside the proxy [FF70+] ***/
533
user_pref("media.peerconnection.ice.proxy_only_if_behind_proxy", true);
534
/* 2003: force a single network interface for ICE candidates generation [FF42+]
535
 * When using a system-wide proxy, it uses the proxy interface
536
 * [1] https://developer.mozilla.org/docs/Web/API/RTCIceCandidate
537
 * [2] https://wiki.mozilla.org/Media/WebRTC/Privacy ***/
538
user_pref("media.peerconnection.ice.default_address_only", true);
539
/* 2004: force exclusion of private IPs from ICE candidates [FF51+]
540
 * [SETUP-HARDEN] This will protect your private IP even in TRUSTED scenarios after you
541
 * grant device access, but often results in breakage on video-conferencing platforms ***/
542
   // user_pref("media.peerconnection.ice.no_host", true);
543
/* 2020: disable GMP (Gecko Media Plugins)
544
 * [1] https://wiki.mozilla.org/GeckoMediaPlugins ***/
545
   // user_pref("media.gmp-provider.enabled", false);
546
547
/*** [SECTION 2400]: DOM (DOCUMENT OBJECT MODEL) ***/
548
user_pref("_user.js.parrot", "2400 syntax error: the parrot's kicked the bucket!");
549
/* 2402: prevent scripts from moving and resizing open windows ***/
550
user_pref("dom.disable_window_move_resize", true);
551
552
/*** [SECTION 2600]: MISCELLANEOUS ***/
553
user_pref("_user.js.parrot", "2600 syntax error: the parrot's run down the curtain!");
554
/* 2603: remove temp files opened from non-PB windows with an external application
555
 * [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=302433,1738574 ***/
556
user_pref("browser.download.start_downloads_in_tmp_dir", true); // [FF102+]
557
user_pref("browser.helperApps.deleteTempFileOnExit", true);
558
/* 2606: disable UITour backend so there is no chance that a remote page can use it ***/
559
user_pref("browser.uitour.enabled", false);
560
   // user_pref("browser.uitour.url", ""); // Defense-in-depth
561
/* 2608: reset remote debugging to disabled
562
 * [1] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/16222 ***/
563
user_pref("devtools.debugger.remote-enabled", false); // [DEFAULT: false]
564
/* 2615: disable websites overriding Firefox's keyboard shortcuts [FF58+]
565
 * 0 (default) or 1=allow, 2=block
566
 * [SETTING] to add site exceptions: Ctrl+I>Permissions>Override Keyboard Shortcuts ***/
567
   // user_pref("permissions.default.shortcuts", 2);
568
/* 2616: remove special permissions for certain mozilla domains [FF35+]
569
 * [1] resource://app/defaults/permissions ***/
570
user_pref("permissions.manager.defaultsUrl", "");
571
/* 2619: use Punycode in Internationalized Domain Names to eliminate possible spoofing
572
 * [SETUP-WEB] Might be undesirable for non-latin alphabet users since legitimate IDN's are also punycoded
573
 * [TEST] https://www.xn--80ak6aa92e.com/ (www.apple.com)
574
 * [1] https://wiki.mozilla.org/IDN_Display_Algorithm
575
 * [2] https://en.wikipedia.org/wiki/IDN_homograph_attack
576
 * [3] https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=punycode+firefox
577
 * [4] https://www.xudongz.com/blog/2017/idn-phishing/ ***/
578
user_pref("network.IDN_show_punycode", true);
579
/* 2620: enforce PDFJS, disable PDFJS scripting
580
 * This setting controls if the option "Display in Firefox" is available in the setting below
581
 *   and by effect controls whether PDFs are handled in-browser or externally ("Ask" or "Open With")
582
 * [WHY] pdfjs is lightweight, open source, and secure: the last exploit was June 2015 [1]
583
 *   It doesn't break "state separation" of browser content (by not sharing with OS, independent apps).
584
 *   It maintains disk avoidance and application data isolation. It's convenient. You can still save to disk.
585
 * [NOTE] JS can still force a pdf to open in-browser by bundling its own code
586
 * [SETUP-CHROME] You may prefer a different pdf reader for security/workflow reasons
587
 * [SETTING] General>Applications>Portable Document Format (PDF)
588
 * [1] https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=pdf.js+firefox ***/
589
user_pref("pdfjs.disabled", false); // [DEFAULT: false]
590
user_pref("pdfjs.enableScripting", false); // [FF86+]
591
/* 2624: disable middle click on new tab button opening URLs or searches using clipboard [FF115+] */
592
user_pref("browser.tabs.searchclipboardfor.middleclick", false); // [DEFAULT: false NON-LINUX]
593
/* 2630: disable content analysis by DLP (Data Loss Prevention) agents
594
 * DLP agents are background processes on managed computers that allow enterprises to monitor locally running
595
 * applications for data exfiltration events, which they can allow/block based on customer defined DLP policies.
596
 * 0=Block all requests, 1=Warn on all requests (which lets the user decide), 2=Allow all requests
597
 * [1] https://github.com/chromium/content_analysis_sdk */
598
user_pref("browser.contentanalysis.enabled", false); // [FF121+] [DEFAULT: false]
599
user_pref("browser.contentanalysis.default_result", 0); // [FF127+] [DEFAULT: 0]
600
601
/** DOWNLOADS ***/
602
/* 2651: enable user interaction for security by always asking where to download
603
 * [SETUP-CHROME] On Android this blocks longtapping and saving images
604
 * [SETTING] General>Downloads>Always ask you where to save files ***/
605
user_pref("browser.download.useDownloadDir", false);
606
/* 2652: disable downloads panel opening on every download [FF96+] ***/
607
user_pref("browser.download.alwaysOpenPanel", false);
608
/* 2653: disable adding downloads to the system's "recent documents" list ***/
609
user_pref("browser.download.manager.addToRecentDocs", false);
610
/* 2654: enable user interaction for security by always asking how to handle new mimetypes [FF101+]
611
 * [SETTING] General>Files and Applications>What should Firefox do with other files ***/
612
user_pref("browser.download.always_ask_before_handling_new_types", true);
613
614
/** EXTENSIONS ***/
615
/* 2660: limit allowed extension directories
616
 * 1=profile, 2=user, 4=application, 8=system, 16=temporary, 31=all
617
 * The pref value represents the sum: e.g. 5 would be profile and application directories
618
 * [SETUP-CHROME] Breaks usage of files which are installed outside allowed directories
619
 * [1] https://archive.is/DYjAM ***/
620
user_pref("extensions.enabledScopes", 5); // [HIDDEN PREF]
621
   // user_pref("extensions.autoDisableScopes", 15); // [DEFAULT: 15]
622
/* 2661: disable bypassing 3rd party extension install prompts [FF82+]
623
 * [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1659530,1681331 ***/
624
user_pref("extensions.postDownloadThirdPartyPrompt", false);
625
/* 2662: disable webextension restrictions on certain mozilla domains (you also need 4503) [FF60+]
626
 * [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1384330,1406795,1415644,1453988 ***/
627
   // user_pref("extensions.webextensions.restrictedDomains", "");
628
629
/*** [SECTION 2700]: ETP (ENHANCED TRACKING PROTECTION) ***/
630
user_pref("_user.js.parrot", "2700 syntax error: the parrot's joined the bleedin' choir invisible!");
631
/* 2701: enable ETP Strict Mode [FF86+]
632
 * ETP Strict Mode enables Total Cookie Protection (TCP)
633
 * [NOTE] Adding site exceptions disables all ETP protections for that site and increases the risk of
634
 * cross-site state tracking e.g. exceptions for SiteA and SiteB means PartyC on both sites is shared
635
 * [1] https://blog.mozilla.org/security/2021/02/23/total-cookie-protection/
636
 * [SETTING] to add site exceptions: Urlbar>ETP Shield
637
 * [SETTING] to manage site exceptions: Options>Privacy & Security>Enhanced Tracking Protection>Manage Exceptions ***/
638
user_pref("browser.contentblocking.category", "strict"); // [HIDDEN PREF]
639
/* 2702: disable ETP web compat features [FF93+]
640
 * [SETUP-HARDEN] Includes skip lists, heuristics (SmartBlock) and automatic grants
641
 * Opener and redirect heuristics are granted for 30 days, see [3]
642
 * [1] https://blog.mozilla.org/security/2021/07/13/smartblock-v2/
643
 * [2] https://hg.mozilla.org/mozilla-central/rev/e5483fd469ab#l4.12
644
 * [3] https://developer.mozilla.org/docs/Web/Privacy/State_Partitioning#storage_access_heuristics ***/
645
   // user_pref("privacy.antitracking.enableWebcompat", false);
646
647
/*** [SECTION 2800]: SHUTDOWN & SANITIZING ***/
648
user_pref("_user.js.parrot", "2800 syntax error: the parrot's bleedin' demised!");
649
/* 2810: enable Firefox to clear items on shutdown
650
 * [NOTE] In FF129+ clearing "siteSettings" on shutdown (2811), or manually via site data (2820) and
651
 * via history (2830), will no longer remove sanitize on shutdown "cookie and site data" site exceptions (2815)
652
 * [SETTING] Privacy & Security>History>Custom Settings>Clear history when Firefox closes | Settings ***/
653
user_pref("privacy.sanitize.sanitizeOnShutdown", false);
654
655
/** SANITIZE ON SHUTDOWN: IGNORES "ALLOW" SITE EXCEPTIONS | v2 migration is FF128+ ***/
656
/* 2811: set/enforce what items to clear on shutdown (if 2810 is true) [SETUP-CHROME]
657
 * [NOTE] If "history" is true, downloads will also be cleared ***/
658
user_pref("privacy.clearOnShutdown.cache", true);     // [DEFAULT: true]
659
user_pref("privacy.clearOnShutdown_v2.cache", true);  // [FF128+] [DEFAULT: true]
660
user_pref("privacy.clearOnShutdown.downloads", true); // [DEFAULT: true]
661
user_pref("privacy.clearOnShutdown.formdata", true);  // [DEFAULT: true]
662
user_pref("privacy.clearOnShutdown.history", true);   // [DEFAULT: true]
663
user_pref("privacy.clearOnShutdown_v2.historyFormDataAndDownloads", true); // [FF128+] [DEFAULT: true]
664
   // user_pref("privacy.clearOnShutdown.siteSettings", false); // [DEFAULT: false]
665
   // user_pref("privacy.clearOnShutdown_v2.siteSettings", false); // [FF128+] [DEFAULT: false]
666
/* 2812: set Session Restore to clear on shutdown (if 2810 is true) [FF34+]
667
 * [NOTE] Not needed if Session Restore is not used (0102) or it is already cleared with history (2811)
668
 * [NOTE] If true, this prevents resuming from crashes (also see 5008) ***/
669
   // user_pref("privacy.clearOnShutdown.openWindows", true);
670
671
/** SANITIZE ON SHUTDOWN: RESPECTS "ALLOW" SITE EXCEPTIONS FF103+ | v2 migration is FF128+ ***/
672
/* 2815: set "Cookies" and "Site Data" to clear on shutdown (if 2810 is true) [SETUP-CHROME]
673
 * [NOTE] Exceptions: A "cookie" permission also controls "offlineApps" (see note below). For cross-domain logins,
674
 * add exceptions for both sites e.g. https://www.youtube.com (site) + https://accounts.google.com (single sign on)
675
 * [NOTE] "offlineApps": Offline Website Data: localStorage, service worker cache, QuotaManager (IndexedDB, asm-cache)
676
 * [NOTE] "sessions": Active Logins (has no site exceptions): refers to HTTP Basic Authentication [1], not logins via cookies
677
 * [WARNING] Be selective with what sites you "Allow", as they also disable partitioning (1767271)
678
 * [SETTING] to add site exceptions: Ctrl+I>Permissions>Cookies>Allow (when on the website in question)
679
 * [SETTING] to manage site exceptions: Options>Privacy & Security>Permissions>Settings
680
 * [1] https://en.wikipedia.org/wiki/Basic_access_authentication ***/
681
user_pref("privacy.clearOnShutdown.cookies", false); // Cookies
682
user_pref("privacy.clearOnShutdown.offlineApps", true); // Site Data
683
user_pref("privacy.clearOnShutdown.sessions", true);  // Active Logins [DEFAULT: true]
684
user_pref("privacy.clearOnShutdown_v2.cookiesAndStorage", true); // Cookies, Site Data, Active Logins [FF128+]
685
686
/** SANITIZE SITE DATA: IGNORES "ALLOW" SITE EXCEPTIONS ***/
687
/* 2820: set manual "Clear Data" items [SETUP-CHROME] [FF128+]
688
 * Firefox remembers your last choices. This will reset them when you start Firefox
689
 * [SETTING] Privacy & Security>Browser Privacy>Cookies and Site Data>Clear Data ***/
690
user_pref("privacy.clearSiteData.cache", true);
691
user_pref("privacy.clearSiteData.cookiesAndStorage", false); // keep false until it respects "allow" site exceptions
692
user_pref("privacy.clearSiteData.historyFormDataAndDownloads", true);
693
   // user_pref("privacy.clearSiteData.siteSettings", false);
694
695
/** SANITIZE HISTORY: IGNORES "ALLOW" SITE EXCEPTIONS | clearHistory migration is FF128+ ***/
696
/* 2830: set manual "Clear History" items, also via Ctrl-Shift-Del [SETUP-CHROME]
697
 * Firefox remembers your last choices. This will reset them when you start Firefox
698
 * [NOTE] Regardless of what you set "downloads" to, as soon as the dialog
699
 * for "Clear Recent History" is opened, it is synced to the same as "history"
700
 * [SETTING] Privacy & Security>History>Custom Settings>Clear History ***/
701
user_pref("privacy.cpd.cache", true);    // [DEFAULT: true]
702
user_pref("privacy.clearHistory.cache", true);
703
user_pref("privacy.cpd.formdata", true); // [DEFAULT: true]
704
user_pref("privacy.cpd.history", true);  // [DEFAULT: true]
705
   // user_pref("privacy.cpd.downloads", true); // not used, see note above
706
user_pref("privacy.clearHistory.historyFormDataAndDownloads", true);
707
user_pref("privacy.cpd.cookies", false);
708
user_pref("privacy.cpd.sessions", true); // [DEFAULT: true]
709
user_pref("privacy.cpd.offlineApps", false); // [DEFAULT: false]
710
user_pref("privacy.clearHistory.cookiesAndStorage", false);
711
   // user_pref("privacy.cpd.openWindows", false); // Session Restore
712
   // user_pref("privacy.cpd.passwords", false);
713
   // user_pref("privacy.cpd.siteSettings", false);
714
   // user_pref("privacy.clearHistory.siteSettings", false);
715
716
/** SANITIZE MANUAL: TIMERANGE ***/
717
/* 2840: set "Time range to clear" for "Clear Data" (2820) and "Clear History" (2830)
718
 * Firefox remembers your last choice. This will reset the value when you start Firefox
719
 * 0=everything, 1=last hour, 2=last two hours, 3=last four hours, 4=today
720
 * [NOTE] Values 5 (last 5 minutes) and 6 (last 24 hours) are not listed in the dropdown,
721
 * which will display a blank value, and are not guaranteed to work ***/
722
user_pref("privacy.sanitize.timeSpan", 0);
723
724
/*** [SECTION 4000]: FPP (fingerprintingProtection)
725
   RFP (4501) overrides FPP
726
727
   In FF118+ FPP is on by default in private windows (4001) and in FF119+ is controlled
728
   by ETP (2701). FPP will also use Remote Services in future to relax FPP protections
729
   on a per site basis for compatibility (4004).
730
731
   https://searchfox.org/mozilla-central/source/toolkit/components/resistfingerprinting/RFPTargetsDefault.inc
732
733
   [NOTE] RFPTargets + granular overrides are somewhat experimental and may produce unexpected results
734
   - e.g. FrameRate can only be controlled per process, not per origin
735
736
   1826408 - restrict fonts to system (kBaseFonts + kLangPackFonts) (Windows, Mac, some Linux)
737
      https://searchfox.org/mozilla-central/search?path=StandardFonts*.inc
738
   1858181 - subtly randomize canvas per eTLD+1, per session and per window-mode (FF120+)
739
***/
740
user_pref("_user.js.parrot", "4000 syntax error: the parrot's bereft of life!");
741
/* 4001: enable FPP in PB mode [FF114+]
742
 * [NOTE] In FF119+, FPP for all modes (7016) is enabled with ETP Strict (2701) ***/
743
   // user_pref("privacy.fingerprintingProtection.pbmode", true); // [DEFAULT: true FF118+]
744
/* 4002: set global FPP overrides [FF114+]
745
 * uses "RFPTargets" [1] which despite the name these are not used by RFP
746
 * e.g. "+AllTargets,-CSSPrefersColorScheme,-JSDateTimeUTC" = all targets but allow prefers-color-scheme and do not change timezone
747
 * e.g. "-AllTargets,+CanvasRandomization,+JSDateTimeUTC" = no targets but do use FPP canvas and change timezone
748
 * [NOTE] Not supported by arkenfox. Either use RFP or FPP at defaults
749
 * [1] https://searchfox.org/mozilla-central/source/toolkit/components/resistfingerprinting/RFPTargets.inc ***/
750
   // user_pref("privacy.fingerprintingProtection.overrides", "");
751
/* 4003: set granular FPP overrides
752
 * JSON format: e.g."[{\"firstPartyDomain\": \"netflix.com\", \"overrides\": \"-CanvasRandomization,-FrameRate,\"}]"
753
 * [NOTE] Not supported by arkenfox. Either use RFP or FPP at defaults ***/
754
   // user_pref("privacy.fingerprintingProtection.granularOverrides", "");
755
/* 4004: disable remote FPP overrides [FF127+] ***/
756
   // user_pref("privacy.fingerprintingProtection.remoteOverrides.enabled", false);
757
758
/*** [SECTION 4500]: OPTIONAL RFP (resistFingerprinting)
759
   RFP overrides FPP (4000)
760
761
   FF128+ Arkenfox by default uses FPP (automatically enabled with ETP Strict). For most people
762
   this is all you need. To use RFP instead, add RFP (4501) to your overrides, and optionally
763
   add letterboxing (4504), spoof_english (4506), and webgl (4520).
764
765
   RFP is an all-or-nothing buy in: you cannot pick and choose what parts you want
766
   [TEST] https://arkenfox.github.io/TZP/tzp.html
767
768
   [WARNING] DO NOT USE extensions to alter RFP protected metrics
769
770
    418986 - limit window.screen & CSS media queries (FF41)
771
   1360039 - spoof navigator.hardwareConcurrency as 2 (FF55)
772
 FF56
773
   1333651 - spoof User Agent & Navigator API
774
      version: android version spoofed as ESR (FF119 or lower)
775
      OS: JS spoofed as Windows 10, OS 10.15, Android 10, or Linux | HTTP Headers spoofed as Windows or Android
776
   1369319 - disable device sensor API
777
   1369357 - disable site specific zoom
778
   1337161 - hide gamepads from content
779
   1372072 - spoof network information API as "unknown" when dom.netinfo.enabled = true
780
   1333641 - reduce fingerprinting in WebSpeech API
781
 FF57
782
   1369309 - spoof media statistics
783
   1382499 - reduce screen co-ordinate fingerprinting in Touch API
784
   1217290 & 1409677 - enable some fingerprinting resistance for WebGL
785
   1354633 - limit MediaError.message to a whitelist
786
 FF58+
787
   1372073 - spoof/block fingerprinting in MediaDevices API (FF59)
788
      Spoof: enumerate devices as one "Internal Camera" and one "Internal Microphone"
789
      Block: suppresses the ondevicechange event
790
   1039069 - warn when language prefs are not set to "en*" (FF59)
791
   1222285 & 1433592 - spoof keyboard events and suppress keyboard modifier events (FF59)
792
      Spoofing mimics the content language of the document. Currently it only supports en-US.
793
      Modifier events suppressed are SHIFT and both ALT keys. Chrome is not affected.
794
   1337157 - disable WebGL debug renderer info (FF60)
795
   1459089 - disable OS locale in HTTP Accept-Language headers (ANDROID) (FF62)
796
   1479239 - return "no-preference" with prefers-reduced-motion (FF63)
797
   1363508 & 1826051 - spoof/suppress Pointer Events (FF64, FF132)
798
   1492766 - spoof pointerEvent.pointerid (FF65)
799
   1485266 - disable exposure of system colors to CSS or canvas (FF67)
800
   1494034 - return "light" with prefers-color-scheme (FF67)
801
   1564422 - spoof audioContext outputLatency (FF70)
802
   1595823 - return audioContext sampleRate as 44100 (FF72)
803
   1607316 - spoof pointer as coarse and hover as none (ANDROID) (FF74)
804
   1621433 - randomize canvas (previously FF58+ returned an all-white canvas) (FF78)
805
   1506364 - return "no-preference" with prefers-contrast (FF80)
806
   1653987 - limit font visibility to bundled and "Base Fonts" (Windows, Mac, some Linux) (FF80)
807
   1461454 - spoof smooth=true and powerEfficient=false for supported media in MediaCapabilities (FF82)
808
    531915 - use fdlibm's sin, cos and tan in jsmath (FF93, ESR91.1)
809
   1756280 - enforce navigator.pdfViewerEnabled as true and plugins/mimeTypes as hard-coded values (FF100-115)
810
   1692609 - reduce JS timing precision to 16.67ms (previously FF55+ was 100ms) (FF102)
811
   1422237 - return "srgb" with color-gamut (FF110)
812
   1794628 - return "none" with inverted-colors (FF114)
813
   1787790 - normalize system fonts (FF128)
814
   1835987 - spoof timezone as Atlantic/Reykjavik (previously FF55+ was UTC) (FF128)
815
   1834307 - always use smooth scrolling (FF132)
816
   1918202 - spoof screen orientation based on spoofed screen size and platform (FF132)
817
      previously it always returned landscape-primary and an angle of 0 (FF50+)
818
   1390465 - load all subtitles in WebVTT (Video Text Tracks) (FF133)
819
   1873382 - make spoofed devicePixelRatio and CSS media queries match (FF133)
820
      previously FF41+ devicePixelRatio was hardcoded as 1 and FF127+ as 2
821
      previously FF41+ CSS media queries were spoofed as zoom level at a devicePixelRatio of 1
822
***/
823
user_pref("_user.js.parrot", "4500 syntax error: the parrot's popped 'is clogs");
824
/* 4501: enable RFP
825
 * [NOTE] pbmode applies if true and the original pref is false
826
 * [SETUP-WEB] RFP can cause some website breakage: mainly canvas, use a canvas site exception via the urlbar.
827
 * RFP also has a few side effects: mainly that timezone is GMT, and websites will prefer light theme ***/
828
   // user_pref("privacy.resistFingerprinting", true); // [FF41+]
829
   // user_pref("privacy.resistFingerprinting.pbmode", true); // [FF114+]
830
/* 4502: set RFP new window size max rounded values [FF55+]
831
 * [SETUP-CHROME] sizes round down in hundreds: width to 200s and height to 100s, to fit your screen
832
 * [1] https://bugzilla.mozilla.org/1330882 ***/
833
user_pref("privacy.window.maxInnerWidth", 1600);
834
user_pref("privacy.window.maxInnerHeight", 900);
835
/* 4503: disable mozAddonManager Web API [FF57+]
836
 * [NOTE] To allow extensions to work on AMO, you also need 2662
837
 * [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1384330,1406795,1415644,1453988 ***/
838
user_pref("privacy.resistFingerprinting.block_mozAddonManager", true);
839
/* 4504: enable letterboxing [FF67+]
840
 * Dynamically resizes the inner window by applying margins in stepped ranges [2]
841
 * If you use the dimension pref, then it will only apply those resolutions.
842
 * The format is "width1xheight1, width2xheight2, ..." (e.g. "800x600, 1000x1000")
843
 * [SETUP-WEB] This is independent of RFP (4501). If you're not using RFP, or you are but
844
 * dislike the margins, then flip this pref, keeping in mind that it is effectively fingerprintable
845
 * [WARNING] DO NOT USE: the dimension pref is only meant for testing
846
 * [1] https://bugzilla.mozilla.org/1407366
847
 * [2] https://hg.mozilla.org/mozilla-central/rev/7211cb4f58ff#l5.13 ***/
848
   // user_pref("privacy.resistFingerprinting.letterboxing", true); // [HIDDEN PREF]
849
   // user_pref("privacy.resistFingerprinting.letterboxing.dimensions", ""); // [HIDDEN PREF]
850
/* 4505: disable RFP by domain [FF91+]
851
 * [NOTE] Working examples: "arkenfox.github.io", "*github.io"
852
 * Non-working examples: "https://arkenfox.github.io", "github.io", "*arkenfox.github.io" ***/
853
   // user_pref("privacy.resistFingerprinting.exemptedDomains", "*.example.invalid");
854
/* 4506: disable RFP spoof english prompt [FF59+]
855
 * 0=prompt, 1=disabled, 2=enabled
856
 * [NOTE] When changing from value 2, preferred languages ('intl.accept_languages') is not reset.
857
 * [SETUP-WEB] when enabled, sets 'en-US, en' for displaying pages and 'en-US' as locale.
858
 * [SETTING] General>Language>Choose your preferred language for displaying pages>Choose>Request English... ***/
859
user_pref("privacy.spoof_english", 1);
860
/* 4510: disable using system colors
861
 * [SETTING] General>Language and Appearance>Fonts and Colors>Colors>Use system colors ***/
862
user_pref("browser.display.use_system_colors", false); // [DEFAULT: false NON-WINDOWS]
863
/* 4511: disable using system accent colors ***/
864
user_pref("widget.non-native-theme.use-theme-accent", false); // [DEFAULT: false WINDOWS]
865
/* 4512: enforce links targeting new windows to open in a new tab instead
866
 * 1=most recent window or tab, 2=new window, 3=new tab
867
 * Stops malicious window sizes and some screen resolution leaks.
868
 * You can still right-click a link and open in a new window
869
 * [SETTING] General>Tabs>Open links in tabs instead of new windows
870
 * [TEST] https://arkenfox.github.io/TZP/tzp.html#screen
871
 * [1] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/9881 ***/
872
user_pref("browser.link.open_newwindow", 3); // [DEFAULT: 3]
873
/* 4513: set all open window methods to abide by "browser.link.open_newwindow" (4512)
874
 * [1] https://searchfox.org/mozilla-central/source/dom/tests/browser/browser_test_new_window_from_content.js ***/
875
user_pref("browser.link.open_newwindow.restriction", 0);
876
/* 4520: disable WebGL (Web Graphics Library) ***/
877
   // user_pref("webgl.disabled", true);
878
879
/*** [SECTION 5000]: OPTIONAL OPSEC
880
   Disk avoidance, application data isolation, eyeballs...
881
***/
882
user_pref("_user.js.parrot", "5000 syntax error: the parrot's taken 'is last bow");
883
/* 5001: start Firefox in PB (Private Browsing) mode
884
 * [NOTE] In this mode all windows are "private windows" and the PB mode icon is not displayed
885
 * [NOTE] The P in PB mode can be misleading: it means no "persistent" disk state such as history,
886
 * caches, searches, cookies, localStorage, IndexedDB etc (which you can achieve in normal mode).
887
 * In fact, PB mode limits or removes the ability to control some of these, and you need to quit
888
 * Firefox to clear them. PB is best used as a one off window (Menu>New Private Window) to provide
889
 * a temporary self-contained new session. Close all private windows to clear the PB session.
890
 * [SETTING] Privacy & Security>History>Custom Settings>Always use private browsing mode
891
 * [1] https://wiki.mozilla.org/Private_Browsing
892
 * [2] https://support.mozilla.org/kb/common-myths-about-private-browsing ***/
893
   // user_pref("browser.privatebrowsing.autostart", true);
894
/* 5002: disable memory cache
895
 * capacity: -1=determine dynamically (default), 0=none, n=memory capacity in kibibytes ***/
896
   // user_pref("browser.cache.memory.enable", false);
897
   // user_pref("browser.cache.memory.capacity", 0);
898
/* 5003: disable saving passwords
899
 * [NOTE] This does not clear any passwords already saved
900
 * [SETTING] Privacy & Security>Logins and Passwords>Ask to save logins and passwords for websites ***/
901
   // user_pref("signon.rememberSignons", false);
902
/* 5004: disable permissions manager from writing to disk [FF41+] [RESTART]
903
 * [NOTE] This means any permission changes are session only
904
 * [1] https://bugzilla.mozilla.org/967812 ***/
905
   // user_pref("permissions.memory_only", true); // [HIDDEN PREF]
906
/* 5005: disable intermediate certificate caching [FF41+] [RESTART]
907
 * [NOTE] This affects login/cert/key dbs. The effect is all credentials are session-only.
908
 * Saved logins and passwords are not available. Reset the pref and restart to return them ***/
909
   // user_pref("security.nocertdb", true);
910
/* 5006: disable favicons in history and bookmarks
911
 * [NOTE] Stored as data blobs in favicons.sqlite, these don't reveal anything that your
912
 * actual history (and bookmarks) already do. Your history is more detailed, so
913
 * control that instead; e.g. disable history, clear history on exit, use PB mode
914
 * [NOTE] favicons.sqlite is sanitized on Firefox close ***/
915
   // user_pref("browser.chrome.site_icons", false);
916
/* 5007: exclude "Undo Closed Tabs" in Session Restore ***/
917
   // user_pref("browser.sessionstore.max_tabs_undo", 0);
918
/* 5008: disable resuming session from crash
919
 * [TEST] about:crashparent ***/
920
   // user_pref("browser.sessionstore.resume_from_crash", false);
921
/* 5009: disable "open with" in download dialog [FF50+]
922
 * Application data isolation [1]
923
 * [1] https://bugzilla.mozilla.org/1281959 ***/
924
   // user_pref("browser.download.forbid_open_with", true);
925
/* 5010: disable location bar suggestion types
926
 * [SETTING] Search>Address Bar>When using the address bar, suggest ***/
927
   // user_pref("browser.urlbar.suggest.history", false);
928
   // user_pref("browser.urlbar.suggest.bookmark", false);
929
   // user_pref("browser.urlbar.suggest.openpage", false);
930
   // user_pref("browser.urlbar.suggest.topsites", false); // [FF78+]
931
/* 5011: disable location bar dropdown
932
 * This value controls the total number of entries to appear in the location bar dropdown ***/
933
   // user_pref("browser.urlbar.maxRichResults", 0);
934
/* 5012: disable location bar autofill
935
 * [1] https://support.mozilla.org/kb/address-bar-autocomplete-firefox#w_url-autocomplete ***/
936
   // user_pref("browser.urlbar.autoFill", false);
937
/* 5013: disable browsing and download history
938
 * [NOTE] We also clear history and downloads on exit (2811)
939
 * [SETTING] Privacy & Security>History>Custom Settings>Remember browsing and download history ***/
940
   // user_pref("places.history.enabled", false);
941
/* 5014: disable Windows jumplist [WINDOWS] ***/
942
   // user_pref("browser.taskbar.lists.enabled", false);
943
   // user_pref("browser.taskbar.lists.frequent.enabled", false);
944
   // user_pref("browser.taskbar.lists.recent.enabled", false);
945
   // user_pref("browser.taskbar.lists.tasks.enabled", false);
946
/* 5016: discourage downloading to desktop
947
 * 0=desktop, 1=downloads (default), 2=custom
948
 * [SETTING] To set your custom default "downloads": General>Downloads>Save files to ***/
949
   // user_pref("browser.download.folderList", 2);
950
/* 5017: disable Form Autofill
951
 * If .supportedCountries includes your region (browser.search.region) and .supported
952
 * is "detect" (default), then the UI will show. Stored data is not secure, uses JSON
953
 * [SETTING] Privacy & Security>Forms and Autofill>Autofill addresses
954
 * [1] https://wiki.mozilla.org/Firefox/Features/Form_Autofill ***/
955
   // user_pref("extensions.formautofill.addresses.enabled", false); // [FF55+]
956
   // user_pref("extensions.formautofill.creditCards.enabled", false); // [FF56+]
957
/* 5018: limit events that can cause a pop-up ***/
958
   // user_pref("dom.popup_allowed_events", "click dblclick mousedown pointerdown");
959
/* 5019: disable page thumbnail collection ***/
960
   // user_pref("browser.pagethumbnails.capturing_disabled", true); // [HIDDEN PREF]
961
/* 5020: disable Windows native notifications and use app notications instead [FF111+] [WINDOWS] ***/
962
   // user_pref("alerts.useSystemBackend.windows.notificationserver.enabled", false);
963
/* 5021: disable location bar using search
964
 * Don't leak URL typos to a search engine, give an error message instead
965
 * Examples: "secretplace,com", "secretplace/com", "secretplace com", "secret place.com"
966
 * [NOTE] This does not affect explicit user action such as using search buttons in the
967
 * dropdown, or using keyword search shortcuts you configure in options (e.g. "d" for DuckDuckGo) ***/
968
   // user_pref("keyword.enabled", false);
969
970
/*** [SECTION 5500]: OPTIONAL HARDENING
971
   Not recommended. Overriding these can cause breakage and performance issues,
972
   they are mostly fingerprintable, and the threat model is practically nonexistent
973
***/
974
user_pref("_user.js.parrot", "5500 syntax error: this is an ex-parrot!");
975
/* 5501: disable MathML (Mathematical Markup Language) [FF51+]
976
 * [1] https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=mathml ***/
977
   // user_pref("mathml.disabled", true); // 1173199
978
/* 5502: disable in-content SVG (Scalable Vector Graphics) [FF53+]
979
 * [1] https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=firefox+svg ***/
980
   // user_pref("svg.disabled", true); // 1216893
981
/* 5503: disable graphite
982
 * [1] https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=firefox+graphite
983
 * [2] https://en.wikipedia.org/wiki/Graphite_(SIL) ***/
984
   // user_pref("gfx.font_rendering.graphite.enabled", false);
985
/* 5504: disable asm.js [FF22+]
986
 * [1] http://asmjs.org/
987
 * [2] https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=asm.js
988
 * [3] https://rh0dev.github.io/blog/2017/the-return-of-the-jit/ ***/
989
   // user_pref("javascript.options.asmjs", false);
990
/* 5505: disable Ion and baseline JIT to harden against JS exploits [RESTART]
991
 * [NOTE] When both Ion and JIT are disabled, and trustedprincipals
992
 * is enabled, then Ion can still be used by extensions (1599226)
993
 * [1] https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=firefox+jit
994
 * [2] https://microsoftedge.github.io/edgevr/posts/Super-Duper-Secure-Mode/ ***/
995
   // user_pref("javascript.options.ion", false);
996
   // user_pref("javascript.options.baselinejit", false);
997
   // user_pref("javascript.options.jit_trustedprincipals", true); // [FF75+] [HIDDEN PREF]
998
/* 5506: disable WebAssembly [FF52+]
999
 * Vulnerabilities [1] have increasingly been found, including those known and fixed
1000
 * in native programs years ago [2]. WASM has powerful low-level access, making
1001
 * certain attacks (brute-force) and vulnerabilities more possible
1002
 * [STATS] ~0.2% of websites, about half of which are for cryptomining / malvertising [2][3]
1003
 * [1] https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=wasm
1004
 * [2] https://spectrum.ieee.org/tech-talk/telecom/security/more-worries-over-the-security-of-web-assembly
1005
 * [3] https://www.zdnet.com/article/half-of-the-websites-using-webassembly-use-it-for-malicious-purposes ***/
1006
   // user_pref("javascript.options.wasm", false);
1007
/* 5507: disable rendering of SVG OpenType fonts ***/
1008
   // user_pref("gfx.font_rendering.opentype_svg.enabled", false);
1009
/* 5508: disable all DRM content (EME: Encryption Media Extension)
1010
 * Optionally hide the UI setting which also disables the DRM prompt
1011
 * [SETTING] General>DRM Content>Play DRM-controlled content
1012
 * [TEST] https://bitmovin.com/demos/drm
1013
 * [1] https://www.eff.org/deeplinks/2017/10/drms-dead-canary-how-we-just-lost-web-what-we-learned-it-and-what-we-need-do-next ***/
1014
   // user_pref("media.eme.enabled", false);
1015
   // user_pref("browser.eme.ui.enabled", false);
1016
/* 5509: disable IPv6 if using a VPN
1017
 * This is an application level fallback. Disabling IPv6 is best done at an OS/network
1018
 * level, and/or configured properly in system wide VPN setups.
1019
 * [NOTE] PHP defaults to IPv6 with "localhost". Use "php -S 127.0.0.1:PORT"
1020
 * [SETUP-WEB] PR_CONNECT_RESET_ERROR
1021
 * [TEST] https://ipleak.org/
1022
 * [1] https://www.internetsociety.org/tag/ipv6-security/ (Myths 2,4,5,6) ***/
1023
   // user_pref("network.dns.disableIPv6", true);
1024
/* 5510: control when to send a cross-origin referer
1025
 * 0=always (default), 1=only if base domains match, 2=only if hosts match
1026
 * [NOTE] Will cause breakage: older modems/routers and some sites e.g banks, vimeo, icloud, instagram ***/
1027
   // user_pref("network.http.referer.XOriginPolicy", 2);
1028
/* 5511: set DoH bootstrap address [FF89+]
1029
 * Firefox uses the system DNS to initially resolve the IP address of your DoH server.
1030
 * When set to a valid, working value that matches your "network.trr.uri" (0712) Firefox
1031
 * won't use the system DNS. If the IP doesn't match then DoH won't work ***/
1032
   // user_pref("network.trr.bootstrapAddr", "10.0.0.1"); // [HIDDEN PREF]
1033
1034
/*** [SECTION 6000]: DON'T TOUCH ***/
1035
user_pref("_user.js.parrot", "6000 syntax error: the parrot's 'istory!");
1036
/* 6001: enforce Firefox blocklist
1037
 * [WHY] It includes updates for "revoked certificates"
1038
 * [1] https://blog.mozilla.org/security/2015/03/03/revoking-intermediate-certificates-introducing-onecrl/ ***/
1039
user_pref("extensions.blocklist.enabled", true); // [DEFAULT: true]
1040
/* 6002: enforce no referer spoofing
1041
 * [WHY] Spoofing can affect CSRF (Cross-Site Request Forgery) protections ***/
1042
user_pref("network.http.referer.spoofSource", false); // [DEFAULT: false]
1043
/* 6004: enforce a security delay on some confirmation dialogs such as install, open/save
1044
 * [1] https://www.squarefree.com/2004/07/01/race-conditions-in-security-dialogs/ ***/
1045
user_pref("security.dialog_enable_delay", 1000); // [DEFAULT: 1000]
1046
/* 6008: enforce no First Party Isolation [FF51+]
1047
 * [WARNING] Replaced with network partitioning (FF85+) and TCP (2701), and enabling FPI
1048
 * disables those. FPI is no longer maintained except at Tor Project for Tor Browser's config ***/
1049
user_pref("privacy.firstparty.isolate", false); // [DEFAULT: false]
1050
/* 6009: enforce SmartBlock shims (about:compat) [FF81+]
1051
 * [1] https://blog.mozilla.org/security/2021/03/23/introducing-smartblock/ ***/
1052
user_pref("extensions.webcompat.enable_shims", true); // [HIDDEN PREF] [DEFAULT: true]
1053
/* 6010: enforce no TLS 1.0/1.1 downgrades
1054
 * [TEST] https://tls-v1-1.badssl.com:1010/ ***/
1055
user_pref("security.tls.version.enable-deprecated", false); // [DEFAULT: false]
1056
/* 6011: enforce disabling of Web Compatibility Reporter [FF56+]
1057
 * Web Compatibility Reporter adds a "Report Site Issue" button to send data to Mozilla
1058
 * [WHY] To prevent wasting Mozilla's time with a custom setup ***/
1059
user_pref("extensions.webcompat-reporter.enabled", false); // [DEFAULT: false]
1060
/* 6012: enforce Quarantined Domains [FF115+]
1061
 * [WHY] https://support.mozilla.org/kb/quarantined-domains */
1062
user_pref("extensions.quarantinedDomains.enabled", true); // [DEFAULT: true]
1063
/* 6050: prefsCleaner: previously active items removed from arkenfox 115-127 ***/
1064
   // user_pref("accessibility.force_disabled", "");
1065
   // user_pref("browser.urlbar.dnsResolveSingleWordsAfterSearch", "");
1066
   // user_pref("geo.provider.network.url", "");
1067
   // user_pref("geo.provider.network.logging.enabled", "");
1068
   // user_pref("geo.provider.use_gpsd", "");
1069
   // user_pref("network.protocol-handler.external.ms-windows-store", "");
1070
   // user_pref("privacy.partition.always_partition_third_party_non_cookie_storage", "");
1071
   // user_pref("privacy.partition.always_partition_third_party_non_cookie_storage.exempt_sessionstorage", "");
1072
   // user_pref("privacy.partition.serviceWorkers", "");
1073
1074
/*** [SECTION 7000]: DON'T BOTHER ***/
1075
user_pref("_user.js.parrot", "7000 syntax error: the parrot's pushing up daisies!");
1076
/* 7001: disable APIs
1077
 * Location-Aware Browsing, Full Screen
1078
 * [WHY] The API state is easily fingerprintable.
1079
 * Geo is behind a prompt (7002). Full screen requires user interaction ***/
1080
   // user_pref("geo.enabled", false);
1081
   // user_pref("full-screen-api.enabled", false);
1082
/* 7002: set default permissions
1083
 * Location, Camera, Microphone, Notifications [FF58+] Virtual Reality [FF73+]
1084
 * 0=always ask (default), 1=allow, 2=block
1085
 * [WHY] These are fingerprintable via Permissions API, except VR. Just add site
1086
 * exceptions as allow/block for frequently visited/annoying sites: i.e. not global
1087
 * [SETTING] to add site exceptions: Ctrl+I>Permissions>
1088
 * [SETTING] to manage site exceptions: Options>Privacy & Security>Permissions>Settings ***/
1089
   // user_pref("permissions.default.geo", 0);
1090
   // user_pref("permissions.default.camera", 0);
1091
   // user_pref("permissions.default.microphone", 0);
1092
   // user_pref("permissions.default.desktop-notification", 0);
1093
   // user_pref("permissions.default.xr", 0); // Virtual Reality
1094
/* 7003: disable non-modern cipher suites [1]
1095
 * [WHY] Passive fingerprinting. Minimal/non-existent threat of downgrade attacks
1096
 * [1] https://browserleaks.com/ssl ***/
1097
   // user_pref("security.ssl3.ecdhe_ecdsa_aes_128_sha", false);
1098
   // user_pref("security.ssl3.ecdhe_ecdsa_aes_256_sha", false);
1099
   // user_pref("security.ssl3.ecdhe_rsa_aes_128_sha", false);
1100
   // user_pref("security.ssl3.ecdhe_rsa_aes_256_sha", false);
1101
   // user_pref("security.ssl3.rsa_aes_128_gcm_sha256", false); // no PFS
1102
   // user_pref("security.ssl3.rsa_aes_256_gcm_sha384", false); // no PFS
1103
   // user_pref("security.ssl3.rsa_aes_128_sha", false); // no PFS
1104
   // user_pref("security.ssl3.rsa_aes_256_sha", false); // no PFS
1105
/* 7004: control TLS versions
1106
 * [WHY] Passive fingerprinting and security ***/
1107
   // user_pref("security.tls.version.min", 3); // [DEFAULT: 3]
1108
   // user_pref("security.tls.version.max", 4);
1109
/* 7005: disable SSL session IDs [FF36+]
1110
 * [WHY] Passive fingerprinting and perf costs. These are session-only
1111
 * and isolated with network partitioning (FF85+) and/or containers ***/
1112
   // user_pref("security.ssl.disable_session_identifiers", true);
1113
/* 7007: referers
1114
 * [WHY] Only cross-origin referers (1602, 5510) matter ***/
1115
   // user_pref("network.http.sendRefererHeader", 2);
1116
   // user_pref("network.http.referer.trimmingPolicy", 0);
1117
/* 7008: set the default Referrer Policy [FF59+]
1118
 * 0=no-referer, 1=same-origin, 2=strict-origin-when-cross-origin, 3=no-referrer-when-downgrade
1119
 * [WHY] Defaults are fine. They can be overridden by a site-controlled Referrer Policy ***/
1120
   // user_pref("network.http.referer.defaultPolicy", 2); // [DEFAULT: 2]
1121
   // user_pref("network.http.referer.defaultPolicy.pbmode", 2); // [DEFAULT: 2]
1122
/* 7010: disable HTTP Alternative Services [FF37+]
1123
 * [WHY] Already isolated with network partitioning (FF85+) ***/
1124
   // user_pref("network.http.altsvc.enabled", false);
1125
/* 7011: disable website control over browser right-click context menu
1126
 * [WHY] Just use Shift-Right-Click ***/
1127
   // user_pref("dom.event.contextmenu.enabled", false);
1128
/* 7012: disable icon fonts (glyphs) and local fallback rendering
1129
 * [WHY] Breakage, font fallback is equivalency, also RFP
1130
 * [1] https://bugzilla.mozilla.org/789788
1131
 * [2] https://gitlab.torproject.org/legacy/trac/-/issues/8455 ***/
1132
   // user_pref("gfx.downloadable_fonts.enabled", false); // [FF41+]
1133
   // user_pref("gfx.downloadable_fonts.fallback_delay", -1);
1134
/* 7013: disable Clipboard API
1135
 * [WHY] Fingerprintable. Breakage. Cut/copy/paste require user
1136
 * interaction, and paste is limited to focused editable fields ***/
1137
   // user_pref("dom.event.clipboardevents.enabled", false);
1138
/* 7014: disable System Add-on updates
1139
 * [WHY] It can compromise security. System addons ship with prefs, use those ***/
1140
   // user_pref("extensions.systemAddon.update.enabled", false); // [FF62+]
1141
   // user_pref("extensions.systemAddon.update.url", ""); // [FF44+]
1142
/* 7015: enable the DNT (Do Not Track) HTTP header
1143
 * [WHY] DNT is enforced with Tracking Protection which is used in ETP Strict (2701) ***/
1144
   // user_pref("privacy.donottrackheader.enabled", true);
1145
/* 7016: customize ETP settings
1146
 * [NOTE] FPP (fingerprintingProtection) is ignored when RFP (4501) is enabled
1147
 * [WHY] Arkenfox only supports strict (2701) which sets these at runtime ***/
1148
   // user_pref("network.cookie.cookieBehavior", 5); // [DEFAULT: 5]
1149
   // user_pref("network.cookie.cookieBehavior.optInPartitioning", true); // [ETP FF132+]
1150
   // user_pref("network.http.referer.disallowCrossSiteRelaxingDefault", true);
1151
   // user_pref("network.http.referer.disallowCrossSiteRelaxingDefault.top_navigation", true); // [FF100+]
1152
   // user_pref("privacy.bounceTrackingProtection.mode", 1); // [FF131+] [ETP FF133+]
1153
   // user_pref("privacy.fingerprintingProtection", true); // [FF114+] [ETP FF119+]
1154
   // user_pref("privacy.partition.network_state.ocsp_cache", true); // [DEFAULT: true FF123+]
1155
   // user_pref("privacy.query_stripping.enabled", true); // [FF101+]
1156
   // user_pref("privacy.trackingprotection.enabled", true);
1157
   // user_pref("privacy.trackingprotection.socialtracking.enabled", true);
1158
   // user_pref("privacy.trackingprotection.cryptomining.enabled", true); // [DEFAULT: true]
1159
   // user_pref("privacy.trackingprotection.fingerprinting.enabled", true); // [DEFAULT: true]
1160
/* 7017: disable service workers
1161
 * [WHY] Already isolated with TCP (2701) behind a pref (2710) ***/
1162
   // user_pref("dom.serviceWorkers.enabled", false);
1163
/* 7018: disable Web Notifications [FF22+]
1164
 * [WHY] Web Notifications are behind a prompt (7002)
1165
 * [1] https://blog.mozilla.org/en/products/firefox/block-notification-requests/ ***/
1166
   // user_pref("dom.webnotifications.enabled", false);
1167
/* 7019: disable Push Notifications [FF44+]
1168
 * [WHY] Website "push" requires subscription, and the API is required for CRLite (1224)
1169
 * [NOTE] To remove all subscriptions, reset "dom.push.userAgentID"
1170
 * [1] https://support.mozilla.org/kb/push-notifications-firefox ***/
1171
   // user_pref("dom.push.enabled", false);
1172
/* 7020: disable WebRTC (Web Real-Time Communication)
1173
 * [WHY] Firefox desktop uses mDNS hostname obfuscation and the private IP is never exposed until
1174
 * required in TRUSTED scenarios; i.e. after you grant device (microphone or camera) access
1175
 * [TEST] https://browserleaks.com/webrtc
1176
 * [1] https://groups.google.com/g/discuss-webrtc/c/6stQXi72BEU/m/2FwZd24UAQAJ
1177
 * [2] https://datatracker.ietf.org/doc/html/draft-ietf-mmusic-mdns-ice-candidates#section-3.1.1 ***/
1178
   // user_pref("media.peerconnection.enabled", false);
1179
/* 7021: enable GPC (Global Privacy Control) in non-PB windows
1180
 * [WHY] Passive and active fingerprinting. Mostly redundant with Tracking Protection
1181
 * in ETP Strict (2701) and sanitizing on close (2800s) ***/
1182
   // user_pref("privacy.globalprivacycontrol.enabled", true);
1183
1184
/*** [SECTION 8000]: DON'T BOTHER: FINGERPRINTING
1185
   [WHY] They are insufficient to help anti-fingerprinting and do more harm than good
1186
   [WARNING] DO NOT USE with RFP. RFP already covers these and they can interfere
1187
***/
1188
user_pref("_user.js.parrot", "8000 syntax error: the parrot's crossed the Jordan");
1189
/* 8001: prefsCleaner: reset items useless for anti-fingerprinting ***/
1190
   // user_pref("browser.display.use_document_fonts", "");
1191
   // user_pref("browser.zoom.siteSpecific", "");
1192
   // user_pref("device.sensors.enabled", "");
1193
   // user_pref("dom.enable_performance", "");
1194
   // user_pref("dom.enable_resource_timing", "");
1195
   // user_pref("dom.gamepad.enabled", "");
1196
   // user_pref("dom.maxHardwareConcurrency", "");
1197
   // user_pref("dom.w3c_touch_events.enabled", "");
1198
   // user_pref("dom.webaudio.enabled", "");
1199
   // user_pref("font.system.whitelist", "");
1200
   // user_pref("general.appname.override", "");
1201
   // user_pref("general.appversion.override", "");
1202
   // user_pref("general.buildID.override", "");
1203
   // user_pref("general.oscpu.override", "");
1204
   // user_pref("general.platform.override", "");
1205
   // user_pref("general.useragent.override", "");
1206
   // user_pref("media.navigator.enabled", "");
1207
   // user_pref("media.ondevicechange.enabled", "");
1208
   // user_pref("media.video_stats.enabled", "");
1209
   // user_pref("media.webspeech.synth.enabled", "");
1210
   // user_pref("ui.use_standins_for_native_colors", "");
1211
   // user_pref("webgl.enable-debug-renderer-info", "");
1212
1213
/*** [SECTION 9000]: NON-PROJECT RELATED ***/
1214
user_pref("_user.js.parrot", "9000 syntax error: the parrot's cashed in 'is chips!");
1215
/* 9001: disable welcome notices ***/
1216
user_pref("browser.startup.homepage_override.mstone", "ignore"); // [HIDDEN PREF]
1217
/* 9002: disable General>Browsing>Recommend extensions/features as you browse [FF67+] ***/
1218
user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false);
1219
user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false);
1220
/* 9004: disable search terms [FF110+]
1221
 * [SETTING] Search>Search Bar>Use the address bar for search and navigation>Show search terms instead of URL... ***/
1222
user_pref("browser.urlbar.showSearchTerms.enabled", false);
1223
1224
/*** [SECTION 9999]: DEPRECATED / RENAMED ***/
1225
user_pref("_user.js.parrot", "9999 syntax error: the parrot's shuffled off 'is mortal coil!");
1226
/* ESR115.x still uses all the following prefs
1227
// [NOTE] replace the * with a slash in the line above to re-enable active ones
1228
// FF116
1229
// 4506: set RFP's font visibility level (1402) [FF94+]
1230
   // [-] https://bugzilla.mozilla.org/1838415
1231
   // user_pref("layout.css.font-visibility.resistFingerprinting", 1); // [DEFAULT: 1]
1232
// FF117
1233
// 1221: disable Windows Microsoft Family Safety cert [FF50+] [WINDOWS]
1234
   // 0=disable detecting Family Safety mode and importing the root
1235
   // 1=only attempt to detect Family Safety mode (don't import the root)
1236
   // 2=detect Family Safety mode and import the root
1237
   // [1] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/21686
1238
   // [-] https://bugzilla.mozilla.org/1844908
1239
user_pref("security.family_safety.mode", 0);
1240
// 7018: disable service worker Web Notifications [FF44+]
1241
   // [WHY] Web Notifications are behind a prompt (7002)
1242
   // [1] https://blog.mozilla.org/en/products/firefox/block-notification-requests/
1243
   // [-] https://bugzilla.mozilla.org/1842457
1244
   // user_pref("dom.webnotifications.serviceworker.enabled", false);
1245
// FF118
1246
// 1402: limit font visibility (Windows, Mac, some Linux) [FF94+]
1247
   // Uses hardcoded lists with two parts: kBaseFonts + kLangPackFonts [1], bundled fonts are auto-allowed
1248
   // In normal windows: uses the first applicable: RFP over TP over Standard
1249
   // In Private Browsing windows: uses the most restrictive between normal and private
1250
   // 1=only base system fonts, 2=also fonts from optional language packs, 3=also user-installed fonts
1251
   // [1] https://searchfox.org/mozilla-central/search?path=StandardFonts*.inc
1252
   // [-] https://bugzilla.mozilla.org/1847599
1253
   // user_pref("layout.css.font-visibility.private", 1);
1254
   // user_pref("layout.css.font-visibility.standard", 1);
1255
   // user_pref("layout.css.font-visibility.trackingprotection", 1);
1256
// 2623: disable permissions delegation [FF73+]
1257
   // Currently applies to cross-origin geolocation, camera, mic and screen-sharing
1258
   // permissions, and fullscreen requests. Disabling delegation means any prompts
1259
   // for these will show/use their correct 3rd party origin
1260
   // [1] https://groups.google.com/forum/#!topic/mozilla.dev.platform/BdFOMAuCGW8/discussion
1261
   // [-] https://bugzilla.mozilla.org/1697151
1262
   // user_pref("permissions.delegation.enabled", false);
1263
// FF119
1264
// 0211: use en-US locale regardless of the system or region locale
1265
   // [SETUP-WEB] May break some input methods e.g xim/ibus for CJK languages [1]
1266
   // [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=867501,1629630
1267
   // [-] https://bugzilla.mozilla.org/1846224
1268
   // user_pref("javascript.use_us_english_locale", true); // [HIDDEN PREF]
1269
// 0711: disable skipping DoH when parental controls are enabled [FF70+]
1270
   // [-] https://bugzilla.mozilla.org/1586941
1271
user_pref("network.dns.skipTRR-when-parental-control-enabled", false);
1272
// FF123
1273
// 0334: disable PingCentre telemetry (used in several System Add-ons) [FF57+]
1274
   // Defense-in-depth: currently covered by 0331
1275
   // [-] https://bugzilla.mozilla.org/1868988
1276
user_pref("browser.ping-centre.telemetry", false);
1277
// FF126
1278
// 9003: disable What's New toolbar icon [FF69+]
1279
   // [-] https://bugzilla.mozilla.org/1724300
1280
user_pref("browser.messaging-system.whatsNewPanel.enabled", false);
1281
// FF127
1282
  // 2630: disable content analysis by DLP (Data Loss Prevention) agents - replaced by default_result
1283
  // [-] https://bugzilla.mozilla.org/1880314
1284
user_pref("browser.contentanalysis.default_allow", false);
1285
// 4511: enforce non-native widget theme
1286
   // Security: removes/reduces system API calls, e.g. win32k API [1]
1287
   // Fingerprinting: provides a uniform look and feel across platforms [2]
1288
   // [1] https://bugzilla.mozilla.org/1381938
1289
   // [2] https://bugzilla.mozilla.org/1411425
1290
   // [-] https://bugzilla.mozilla.org/1848899
1291
user_pref("widget.non-native-theme.enabled", true); // [DEFAULT: true]
1292
// ***/
1293
1294
/* ESR128.x still uses all the following prefs
1295
// [NOTE] replace the * with a slash in the line above to re-enable active ones
1296
// FF132
1297
/* 2617: remove webchannel whitelist
1298
   // [-] https://bugzilla.mozilla.org/1275612
1299
   // user_pref("webchannel.allowObject.urlWhitelist", "");
1300
// ***/
1301
1302
/* END: internal custom pref to test for syntax errors ***/
1303
user_pref("_user.js.parrot", "SUCCESS: No no he's not dead, he's, he's restin'!");