Compare commits

...

69 Commits

Author SHA1 Message Date
19b392b83d 70-beta 2019-11-24 05:23:10 +00:00
2db76c95c3 1603: breaks icloud, closes #850 2019-11-23 16:19:09 +00:00
b6fbf77dde Create ghacks-clear-FF68inclusive-[RFP-alternatives].js 2019-11-23 03:04:14 +00:00
a4ba22e912 Delete ghacks-clear-FF60inclusive-[RFP-alternatives].js 2019-11-23 03:02:59 +00:00
163e18ce6d Create ghacks-clear-FF68inclusive-[deprecated].js 2019-11-23 02:57:26 +00:00
a13027905e Delete ghacks-clear-FF60inclusive-[deprecated].js 2019-11-23 02:56:30 +00:00
8f76d9439f 2002: add FF70 bugzilla link 2019-11-22 15:26:38 +00:00
f0980b5cb8 2002: add proxy_only_if_behind_proxy 2019-11-22 15:19:37 +00:00
450c9a9e0f simplify ciphers, closes #839 (#844)
* simplify ciphers

- let's not encourage (remove options 1, 2) changing your cipher suite FP
- remove "it's quite technical ..." (everything is technical to someone), trim to one line
- add test link so users can just see that it's FP'able
- reinforce not to fuck with the cipher suite in the cipher's sub-section
2019-11-23 03:23:08 +13:00
6acfdaccbd RFP stuff 2019-11-20 04:48:15 +00:00
a0e0a2a6c9 2680 tweak #840 2019-11-19 16:26:14 +00:00
f67e729197 whatsNewPanel correct version 2019-11-19 06:39:08 +00:00
19526b573c 2805 note, FPI change (#842) 2019-11-19 16:31:48 +13:00
b0221ec838 1576254 version fixup 2019-11-17 10:33:02 +00:00
a3611b7cf8 changes to prefs affecting extensions
also first word on pdfjs.disabled, to be consistent
2019-11-14 02:39:48 +00:00
bff1e84afa v1.6.0 2019-11-11 15:10:14 +00:00
1d31da40ec missing comma
thanks @sebp  - 0d57cfc44a (commitcomment-35890867)
2019-11-11 13:00:01 +00:00
0d57cfc44a about_newtab_segregation.enabled 2019-11-09 23:25:52 +00:00
0cfb2fb06d 1703: remove
default true since FF61, and ESR60 is now EOL
2019-11-09 23:23:34 +00:00
d5f297ed42 5000s: disable what's new 2019-11-08 18:06:35 +00:00
c13dbdf40d 1201 update (#838)
https://wiki.mozilla.org/Security:Renegotiation describes

> **the new default behaviour** that was introduced in experimental mozilla-central nightly versions on 2010-02-08

where the last step is

> - should the server (or a MITM) request **renegotiation**, Mozilla will terminate the connection with an error message

and then after talking about breakage ...

> The above defaults may break some client/server environments where a Server is still using old software and requires renegotiation.

mentions workarounds to reduce said breakage:

> In order to give such environments a way to keep using Firefox (et.al.) to connect to their vulnerable server infrastructure, the following preferences are available:

specifically talking about the first 2 prefs listed there, one allowing to specify a list of hosts "where renegotiation may be performed" and the 2nd one "completely disables the new protection mechanisms".
But both those prefs were removed in FF38, meaning that since then it's no longer possible to disable the default behaviour that is "should the server (or a MITM) request **renegotiation**, Mozilla will terminate the connection with an error message".

But all of this is about the **re**-negotiation part and not negotiation. And nowhere does it say "insecure" renegotiation, which, as I read it, means that FF will terminate the connection for any kind of **renegotiation**, safe or unsafe.

1201 controls the negotiation part:

> This pref controls the behaviour during the initial negotiation between client and server.
> If set to true, a Mozilla client will reject all connection attempts to servers that are still using the old SSL/TLS protocol and which might be vulnerable to the attack.
> Setting this preference to “true” is the only way to guarantee full protection against the attack.

I think "servers that are still using the old SSL/TLS protocol" actually means servers that **only** support the old protocols.
Servers still supporting those old protocols in addition to some new protocol versions should not be affected by this pref because FF will be able to negotiate to use one of the newer protocol versions.

Ergo lets fix the title and remove the line about renegotiation support because I think that's irrelevant.


ps. the sslpulse link is nice and I'd like to keep it somewhere but it doesn't really fit in 1201 IMO so I moved it to 1202.
2019-11-09 05:42:21 +13:00
6173104a9e re-add relevant deprecated items for ESR users (#837)
makes the prefsCleaner scripts useful again for users updating from ESR60 to ESR68
2019-11-09 05:30:03 +13:00
0c79b8b45b Update README.md 2019-11-08 13:46:20 +00:00
895f8d01d5 FF70+: shield studies no longer tied to FHR (#836)
https://bugzilla.mozilla.org/1569330
2019-11-09 02:01:33 +13:00
65dfad5c76 2701: UI changes 2019-11-06 11:37:24 +00:00
fdaf22780f Update README.md 2019-11-02 16:00:12 +00:00
16756646bb remove DoH, closes #790 2019-10-31 09:49:12 +00:00
e4f80225d8 FF72: FPI & IPv6 2019-10-28 12:12:52 +00:00
67eec9c85c pbmode insecure text/icon
see `1273`
- we already make **all** windows do this (which overrides the pb mode setting), and these were inactive
- in FF70+ the icon pref (for PB mode and all windows) is now default true
2019-10-27 04:50:59 +00:00
539750d2f2 FF70 hidden/default changes 2019-10-27 04:41:27 +00:00
d91226ed55 tweakin' 2019-10-20 23:59:16 +00:00
301fcd059d 1003: capacity no longer hidden 2019-10-20 23:36:48 +00:00
1cc9a08a18 remove ESR60.x deprecated
These are archived in #123
2019-10-20 22:40:53 +00:00
5d1857ddd8 start 70 commits 2019-10-20 22:32:37 +00:00
226af6f679 69 final 2019-10-20 22:20:50 +00:00
7f2c92f654 webgl.dxgl.enabled 2019-10-15 09:28:52 +00:00
5b82afd5bd webgl.dxgl.enabled, closes #814 2019-10-15 09:27:44 +00:00
d7b1877a1f browser.sessionhistory.max_entries see #808 2019-10-14 01:14:50 +00:00
1b6239eab8 remove 0804, closes #808
if anyone can show me how this stops history leaks, then I'll put it back with a note saying it's been broken since FF61
2019-10-14 01:13:27 +00:00
ad0187122d some SB were reinstated, closes #806 2019-10-07 16:20:03 +00:00
624e50faac replace ` with ' 2019-10-05 17:51:34 +00:00
a9e9392172 add some SB back, see #803 2019-10-05 17:47:25 +00:00
201210111e char fix 2019-10-05 15:12:21 +00:00
53f8578749 see #807 2019-10-05 15:09:19 +00:00
dc4d9e4dae revamp 0200s (#807), closes #0806
- split geo related vs language/locale related
- rip out intl.locale.requested
- rip out intl.regional_prefs.use_os_locales
- add intl.charset.fallback.override
2019-10-06 04:04:41 +13:00
e1b0eae740 goodbye http and other stuff (#801)
* goodbye http and other stuff

* dead link

* put back asmjs [1] ref

* 0805 test

* typo

* 1222 refs

* 1222 FF version

FYI: https://bugzilla.mozilla.org/show_bug.cgi?id=629558

* 2684: security delay ref

* ESR stuff

* ping ref

* 2684 ref

* 0606: give the standard it's correct name

https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing

* 0805 test instructions

* tweakin'
2019-09-21 16:20:10 +00:00
be0ccf6460 2300: service workers, closes #786 2019-09-17 12:43:50 +12:00
7c0a327b06 cache, closes #778 2019-09-16 15:25:30 +00:00
a35cba3914 2651: android UI breakage, closes #795 2019-09-12 16:22:09 +00:00
e16425310f 0320+0321: redundant prefs, #793 2019-09-12 15:52:46 +00:00
d503d96db0 0320+0321: redundant prefs, closes #793 2019-09-12 15:50:54 +00:00
335299a0cf browser.cache.disk_cache_ssl 2019-09-09 21:45:33 +00:00
7311cfdf84 remove 1002, closes #792 2019-09-09 21:43:50 +00:00
3a9440aeea 0707: Add mode 5 (#789) 2019-09-08 11:38:37 +00:00
3210ab0ca8 370: pocket -> 5000s, closes #787 2019-09-07 07:22:32 +00:00
2c734612f6 ummm .. beta
OK, did that all back to front... alpha is when we're working on the diffs .. beta is when we finished it
2019-09-04 21:40:04 +00:00
a12dd83b1f 69-alpha, fixes #766 2019-09-04 21:36:50 +00:00
44d9ceaf05 various tidyups 2019-09-04 01:40:33 +12:00
be9d9ac9ca 2701: tidyup 2019-09-03 03:34:16 +00:00
66cdb72927 FF69: deprecated 2019-09-02 07:07:50 +00:00
953b96431e 4000: RFP info re 1330467
it rode the train in 69... after a bumpy ride in 68 where it was backed out. Note: it still has some issues. Suggest users wipe the site permissions once upgraded to 69
2019-09-02 06:45:30 +00:00
4d72ad90b0 2701: cookies default FF69+ 2019-09-02 18:33:00 +12:00
cccb5b10b4 plugin.sessionPermissionNow.intervalInMinutes 2019-09-01 21:06:10 +00:00
810045eb39 1802: remove intervalInMinues
with `plugins.click_to_play` deprecated in FF69, no-one here is sure if `intervalInMinutes` still applies to Flash or even works, and no-one here cares about Flash. Happy to let Mozilla just keep restricting it more and more until it's deprecated in early 2020. Note: we already disable flash anyway in pref 1803.
2019-09-01 21:03:53 +00:00
b47982bb9a 2030: again 2019-09-01 20:32:53 +00:00
0691b8babe 2032: fix description
from earthlng 
> it blocks **all media** autoplay "until in foreground", not just audio.
> Source: https://dxr.mozilla.org/mozilla-central/source/toolkit/content/widgets/browser-custom-element.js#1141
2019-09-01 19:22:28 +00:00
8d1c95c650 2030: autoplay changes
When ESR60 hits end of life, we should remove that value 2
2019-09-01 19:16:36 +00:00
19484e1a56 2805: see #774 2019-09-01 14:47:17 +00:00
755ebf88fb start 69 commits 2019-09-01 06:27:24 +00:00
6 changed files with 358 additions and 314 deletions

View File

@ -8,7 +8,7 @@ Everyone, experts included, should at least read the [implementation](https://gi
Note that we do *not* recommend connecting over Tor on Firefox. Use the [Tor Browser](https://www.torproject.org/projects/torbrowser.html.en) if your [threat model](https://www.torproject.org/about/torusers.html.en) calls for it, or for accessing hidden services. Note that we do *not* recommend connecting over Tor on Firefox. Use the [Tor Browser](https://www.torproject.org/projects/torbrowser.html.en) if your [threat model](https://www.torproject.org/about/torusers.html.en) calls for it, or for accessing hidden services.
Also be aware that this `user.js` is made specifically for Firefox. Using it as-is in other Gecko-based browsers can be counterproductive, especially in the Tor Browser. Also be aware that this `user.js` is made specifically for desktop Firefox. Using it as-is in other Gecko-based browsers can be counterproductive, especially in the Tor Browser.
Sitemap: [Releases](https://github.com/ghacksuserjs/ghacks-user.js/releases), [changelogs](https://github.com/ghacksuserjs/ghacks-user.js/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Achangelog), [Wiki](https://github.com/ghacksuserjs/ghacks-user.js/wiki), [stickies](https://github.com/ghacksuserjs/ghacks-user.js/issues?q=is%3Aissue+is%3Aopen+label%3A%22sticky+topic%22). [diffs](https://github.com/ghacksuserjs/ghacks-user.js/issues?q=is%3Aissue+label%3Adiffs) Sitemap: [Releases](https://github.com/ghacksuserjs/ghacks-user.js/releases), [changelogs](https://github.com/ghacksuserjs/ghacks-user.js/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Achangelog), [Wiki](https://github.com/ghacksuserjs/ghacks-user.js/wiki), [stickies](https://github.com/ghacksuserjs/ghacks-user.js/issues?q=is%3Aissue+is%3Aopen+label%3A%22sticky+topic%22). [diffs](https://github.com/ghacksuserjs/ghacks-user.js/issues?q=is%3Aissue+label%3Adiffs)
@ -18,7 +18,7 @@ Literally thousands of sources, references and suggestions. That said...
* Martin Brinkmann at [ghacks](https://www.ghacks.net/) <sup>1</sup> * Martin Brinkmann at [ghacks](https://www.ghacks.net/) <sup>1</sup>
* The ghacks community and commentators * The ghacks community and commentators
* [12bytes](https://12bytes.org/articles/tech/firefox/firefoxgecko-configuration-guide-for-privacy-and-performance-buffs) * [12bytes](https://12bytes.org/articles/tech/firefox/firefoxgecko-configuration-guide-for-privacy-and-performance-buffs)
* The 12bytes article now uses this user.js and supplements it with an additional JS hosted at [GitLab](https://gitlab.com/labwrat/Firefox-user.js/tree/master) * The 12bytes article now uses this user.js and supplements it with an additional JS hosted at [Codeberg](https://codeberg.org/12bytes.org/Firefox-user.js-supplement)
<sup>1</sup> The ghacks user.js was an independent project by [Thorin-Oakenpants](https://github.com/Thorin-Oakenpants) started in early 2015 and was [first published](https://www.ghacks.net/2015/08/18/a-comprehensive-list-of-firefox-privacy-and-security-settings/) at ghacks in August 2015. With Martin Brinkmann's blessing, it will keep the ghacks name. <sup>1</sup> The ghacks user.js was an independent project by [Thorin-Oakenpants](https://github.com/Thorin-Oakenpants) started in early 2015 and was [first published](https://www.ghacks.net/2015/08/18/a-comprehensive-list-of-firefox-privacy-and-security-settings/) at ghacks in August 2015. With Martin Brinkmann's blessing, it will keep the ghacks name.

View File

@ -1,6 +1,6 @@
/*** /***
This will reset the preferences that are under sections 4600 & 4700 in the ghacks user.js This will reset the preferences that are under sections 4600 & 4700 in the ghacks user.js
up to and including release 60-beta. These are the prefs that are no longer necessary, up to and including Firefox/ESR 68. These are the prefs that are no longer necessary,
or they conflict with, privacy.resistFingerprinting if you have that enabled. or they conflict with, privacy.resistFingerprinting if you have that enabled.
For instructions see: For instructions see:
@ -22,6 +22,8 @@
'dom.w3c_touch_events.enabled', 'dom.w3c_touch_events.enabled',
'media.ondevicechange.enabled', 'media.ondevicechange.enabled',
'webgl.enable-debug-renderer-info', 'webgl.enable-debug-renderer-info',
'dom.w3c_pointer_events.enabled',
'ui.use_standins_for_native_colors',
/* section 4700 */ /* section 4700 */
'general.useragent.override', 'general.useragent.override',
'general.buildID.override', 'general.buildID.override',

View File

@ -1,6 +1,6 @@
/*** /***
This will reset the preferences that have been deprecated by Mozilla This will reset the preferences that have been deprecated by Mozilla
and used in the ghacks user.js up to and including release 60-beta and used in the ghacks user.js up to and including Firefox/ESR 68
It is in reverse order, so feel free to remove sections that do not apply It is in reverse order, so feel free to remove sections that do not apply
@ -12,8 +12,43 @@
let ops = [ let ops = [
/* deprecated */ /* deprecated */
/* ESR52.x users can remove sections 53-60 but it is not /* 68 */
crucial as your user.js will reinstate them */ 'browser.newtabpage.activity-stream.disableSnippets',
'browser.aboutHomeSnippets.updateUrl',
'lightweightThemes.update.enabled',
'security.csp.experimentalEnabled',
/* F67 */
'dom.event.highrestimestamp.enabled',
'browser.newtabpage.activity-stream.asrouter.userprefs.cfr',
/* 66 */
'browser.chrome.errorReporter.enabled',
'browser.chrome.errorReporter.submitUrl',
'network.allow-experiments',
/* 65 */
'browser.urlbar.autocomplete.enabled',
'browser.fixup.hide_user_pass',
/* 64 */
'browser.onboarding.enabled',
'devtools.webide.autoinstallADBHelper',
'devtools.webide.adbAddonURL',
'security.csp.enable_violation_events',
/* 63 */
'browser.search.countryCode',
'app.update.enabled',
'shield.savant.enabled',
'browser.chrome.favicons',
'media.autoplay.enabled',
'network.cookie.lifetime.days',
'browser.ctrlTab.previews',
/* 62 */
'plugin.state.java',
/* 61 */
'experiments.enabled',
'experiments.manifest.uri',
'experiments.supported',
'experiments.activeExperiment',
'network.jar.block-remote-files',
'network.jar.open-unsafe-types',
/* 60 */ /* 60 */
'browser.newtabpage.directory.source', 'browser.newtabpage.directory.source',
'browser.newtabpage.enhanced', 'browser.newtabpage.enhanced',
@ -22,7 +57,6 @@
'extensions.shield-recipe-client.api_url', 'extensions.shield-recipe-client.api_url',
'browser.newtabpage.activity-stream.enabled', 'browser.newtabpage.activity-stream.enabled',
'dom.workers.enabled', 'dom.workers.enabled',
'view_source.tab',
/* 59 */ /* 59 */
'intl.locale.matchOS', 'intl.locale.matchOS',
'general.useragent.locale', 'general.useragent.locale',
@ -76,8 +110,6 @@
'plugin.scan.WindowsMediaPlayer', 'plugin.scan.WindowsMediaPlayer',
'media.getusermedia.screensharing.allow_on_old_platforms', 'media.getusermedia.screensharing.allow_on_old_platforms',
'dom.beforeAfterKeyboardEvent.enabled', 'dom.beforeAfterKeyboardEvent.enabled',
/* End of ESR52.x section */
/* 52 */ /* 52 */
'network.http.sendSecureXSiteReferrer', 'network.http.sendSecureXSiteReferrer',
'media.gmp-eme-adobe.enabled', 'media.gmp-eme-adobe.enabled',

View File

@ -1,7 +1,7 @@
/*** /***
This will reset the preferences that have been removed completely from the ghacks user.js. This will reset the preferences that have been removed completely from the ghacks user.js.
Last updated: 16-July-2019 Last updated: 11-November-2019
For instructions see: For instructions see:
https://github.com/ghacksuserjs/ghacks-user.js/wiki/3.1-Resetting-Inactive-Prefs-[Scripts] https://github.com/ghacksuserjs/ghacks-user.js/wiki/3.1-Resetting-Inactive-Prefs-[Scripts]
@ -168,14 +168,9 @@
'signon.storeWhenAutocompleteOff', 'signon.storeWhenAutocompleteOff',
'xpinstall.whitelist.required', 'xpinstall.whitelist.required',
/* 67-beta: Blocklist, SB & TP cleanup: these were all inactive */ /* 67-beta: Blocklist, SB & TP cleanup: these were all inactive */
'browser.safebrowsing.downloads.enabled',
'browser.safebrowsing.downloads.remote.block_dangerous', 'browser.safebrowsing.downloads.remote.block_dangerous',
'browser.safebrowsing.downloads.remote.block_dangerous_host', 'browser.safebrowsing.downloads.remote.block_dangerous_host',
'browser.safebrowsing.downloads.remote.block_potentially_unwanted',
'browser.safebrowsing.downloads.remote.block_uncommon',
'browser.safebrowsing.blockedURIs.enabled', 'browser.safebrowsing.blockedURIs.enabled',
'browser.safebrowsing.malware.enabled',
'browser.safebrowsing.phishing.enabled',
'browser.safebrowsing.provider.google.gethashURL', 'browser.safebrowsing.provider.google.gethashURL',
'browser.safebrowsing.provider.google.updateURL', 'browser.safebrowsing.provider.google.updateURL',
'browser.safebrowsing.provider.google4.gethashURL', 'browser.safebrowsing.provider.google4.gethashURL',
@ -204,6 +199,22 @@
'font.name.serif.x-western', 'font.name.serif.x-western',
'layout.css.font-loading-api.enabled', 'layout.css.font-loading-api.enabled',
'toolkit.telemetry.cachedClientID', 'toolkit.telemetry.cachedClientID',
/* 69-beta */
'plugin.sessionPermissionNow.intervalInMinutes',
/* 70-beta */
'browser.cache.disk_cache_ssl',
'browser.sessionhistory.max_entries',
'dom.push.connection.enabled',
'dom.push.serverURL',
'extensions.getAddons.discovery.api_url',
'extensions.htmlaboutaddons.discover.enabled',
'extensions.webservice.discoverURL',
'intl.locale.requested',
'intl.regional_prefs.use_os_locales',
'privacy.usercontext.about_newtab_segregation.enabled',
'security.insecure_connection_icon.pbmode.enabled',
'security.insecure_connection_text.pbmode.enabled',
'webgl.dxgl.enabled',
/* reset parrot: check your open about:config after running the script */ /* reset parrot: check your open about:config after running the script */
'_user.js.parrot' '_user.js.parrot'
] ]

View File

@ -1,65 +1,11 @@
/*** ghacks-user.js troubleshooter.js v1.5.2 ***/ /*** ghacks-user.js troubleshooter.js v1.6.0 ***/
(function() { (function() {
if("undefined" === typeof(Services)) { if ("undefined" === typeof(Services)) return alert('about:config needs to be the active tab!');
alert("about:config needs to be the active tab!");
return;
}
function getMyList(arr) { const aPREFS = [
let aRet = [];
let dummy = 0;
for (let i = 0, len = arr.length; i < len; i++) {
if (Services.prefs.prefHasUserValue(arr[i])) {
dummy = Services.prefs.getPrefType(arr[i]);
switch (dummy) {
case 32: // string (see https://dxr.mozilla.org/mozilla-central/source/modules/libpref/nsIPrefBranch.idl#31)
dummy = Services.prefs.getCharPref(arr[i]);
aRet.push({'name':arr[i],'value': dummy,'type':32});
break;
case 64: // int
dummy = Services.prefs.getIntPref(arr[i]);
aRet.push({'name':arr[i],'value': dummy,'type':64});
break;
case 128: // boolean
dummy = Services.prefs.getBoolPref(arr[i]);
aRet.push({'name':arr[i],'value': dummy,'type':128});
break;
default:
console.log("error detecting pref-type for '"+arr[i]+"' !");
}
}
}
return aRet;
}
function reapply(arr) {
for (let i = 0, len = arr.length; i < len; i++) {
switch (arr[i].type) {
case 32: // string
Services.prefs.setCharPref(arr[i].name, arr[i].value);
break;
case 64: // int
Services.prefs.setIntPref(arr[i].name, arr[i].value);
break;
case 128: // boolean
Services.prefs.setBoolPref(arr[i].name, arr[i].value);
break;
default:
console.log("error re-appyling value for '"+arr[i].name+"' !"); // should never happen
}
}
}
function myreset(arr) {
for (let i = 0, len = arr.length; i < len; i++) {
Services.prefs.clearUserPref(arr[i].name);
}
}
let ops = [
/* known culprits */ /* known culprits */
'network.cookie.cookieBehavior', 'network.cookie.cookieBehavior',
@ -160,56 +106,108 @@
'last.one.without.comma' 'last.one.without.comma'
] ]
// any runtime-set pref that everyone will have and that can be safely reset
const oFILLER = { type: 64, name: 'extensions.blocklist.pingCountTotal', value: -1 };
// reset prefs that set the same value as FFs default value function getMyList(arr) {
let aTEMP = getMyList(ops); const aRet = [];
myreset(aTEMP); for (const sPname of arr) {
reapply(aTEMP); if (Services.prefs.prefHasUserValue(sPname)) {
const ptype = Services.prefs.getPrefType(sPname);
switch (ptype) {
case 32: // string (see https://dxr.mozilla.org/mozilla-central/source/modules/libpref/nsIPrefBranch.idl#31)
aRet.push({'type':ptype,'name':sPname,'value':Services.prefs.getCharPref(sPname)});
break;
case 64: // int
aRet.push({'type':ptype,'name':sPname,'value':Services.prefs.getIntPref(sPname)});
break;
case 128: // boolean
aRet.push({'type':ptype,'name':sPname,'value':Services.prefs.getBoolPref(sPname)});
break;
default:
console.log("error detecting pref-type for '"+sPname+"' !");
}
}
}
return aRet;
}
const aBACKUP = getMyList(ops); function reapply(arr) {
//console.log(aBACKUP.length, "user-set prefs from our list detected and their values stored."); for (const oPref of arr) {
switch (oPref.type) {
case 32: // string
Services.prefs.setCharPref(oPref.name, oPref.value);
break;
case 64: // int
Services.prefs.setIntPref(oPref.name, oPref.value);
break;
case 128: // boolean
Services.prefs.setBoolPref(oPref.name, oPref.value);
break;
default:
console.log("error re-appyling value for '"+oPref.name+"' !"); // should never happen
}
}
}
let myArr = aBACKUP; function myreset(arr) {
let found = false; for (const oPref of arr) Services.prefs.clearUserPref(oPref.name);
let aDbg = []; }
focus();
myreset(aBACKUP); // reset all detected prefs function resetAllMatchingDefault(arr) {
if (confirm("all detected prefs reset.\n\n!! KEEP THIS PROMPT OPEN AND TEST THE SITE IN ANOTHER TAB !!\n\nIF the problem still exists, this script can't help you - click cancel to re-apply your values and exit.\n\nClick OK if your problem is fixed.")) { const aTmp = getMyList(arr);
aDbg = myArr; myreset(aTmp);
reapply(aBACKUP); reapply(aTmp);
myreset(myArr.slice(0, parseInt(myArr.length/2))); }
while (myArr.length >= 2) {
function _main(aALL) {
const _h = (arr) => Math.ceil(arr.length/2);
let aTmp = aALL, aDbg = aALL;
reapply(aALL);
myreset(aTmp.slice(0, _h(aTmp)));
while (aTmp.length) {
alert("NOW TEST AGAIN !"); alert("NOW TEST AGAIN !");
if (confirm("if the problem still exists click OK, otherwise click cancel.")) { if (confirm("if the problem still exists click OK, otherwise click cancel.")) {
myArr = myArr.slice(parseInt(myArr.length/2)); aTmp = aTmp.slice(_h(aTmp));
if (myArr.length == 1) {
alert("The problem is caused by more than 1 pref !\n\nNarrowed it down to "+ aDbg.length.toString() +" prefs, check the console ...");
break;
}
} else { } else {
myArr = myArr.slice(0, parseInt(myArr.length/2)); aTmp = aTmp.slice(0, _h(aTmp));
aDbg = myArr; aDbg = aTmp; // update narrowed down list
if (myArr.length == 1) { found = true; break; } if (aDbg.length == 1) break;
} }
reapply(aBACKUP); reapply(aALL);
myreset(myArr.slice(0, parseInt(myArr.length/2))); // reset half of the remaining prefs myreset(aTmp.slice(0, _h(aTmp))); // reset half of the remaining prefs
} }
reapply(aBACKUP); reapply(aALL);
if (aDbg.length == 1) return alert("narrowed it down to:\n\n"+aDbg[0].name+"\n");
if (aDbg.length == aALL.length) {
let msg = "Failed to narrow it down beyond the initial "+aALL.length+" prefs. The problem is most likely caused by at least 2 prefs!\n\n";
msg += "Either those prefs are too far apart in the list or there are exactly 2 culprits and they just happen to be at the wrong place.\n\n";
msg += "In case it's the latter, the script can add a dummy pref and you can try again - Try again?";
if (confirm(msg)) return _main([...aALL, oFILLER]);
} else if (aDbg.length > 10 && confirm("Narrowed it down to "+aDbg.length+" prefs. Try narrowing it down further?")) {
return _main(aDbg.reverse());
} }
else {
reapply(aBACKUP); alert("Narrowed it down to "+ aDbg.length.toString() +" prefs, check the console ...");
console.log("The problem is caused by 2 or more of these prefs:");
for (const oPref of aDbg) console.log(oPref.name);
}
resetAllMatchingDefault(aPREFS); // reset user-set prefs matching FFs default value
const aBAK = getMyList(aPREFS);
//console.log(aBAK.length, "user-set prefs from our list detected and their values stored.");
focus();
myreset(aBAK);
if (!confirm("all detected prefs reset.\n\n!! KEEP THIS PROMPT OPEN AND TEST THE SITE IN ANOTHER TAB !!\n\nIF the problem still exists, this script can't help you - click cancel to re-apply your values and exit.\n\nClick OK if your problem is fixed.")) {
reapply(aBAK);
return; return;
} }
if (found) { _main(aBAK);
alert("narrowed it down to:\n\n"+myArr[0].name+"\n");
myreset(myArr); // reset the culprit
}
else {
console.log("the problem is caused by a combination of the following prefs:");
for (let i = 0, len = aDbg.length; i < len; i++) {
console.log(aDbg[i].name);
}
}
})(); })();

389
user.js
View File

@ -1,8 +1,8 @@
/****** /******
* name: ghacks user.js * name: ghacks user.js
* date: 31 August 2019 * date: 24 November 2019
* version 68: Knock on Pants * version 70-beta: Pinpants Wizard
* "It's like thunder, lightning... the way you wear me is frightening" * "Ever since I was a young pants, I've played the silver ball"
* authors: v52+ github | v51- www.ghacks.net * authors: v52+ github | v51- www.ghacks.net
* url: https://github.com/ghacksuserjs/ghacks-user.js * url: https://github.com/ghacksuserjs/ghacks-user.js
* license: MIT: https://github.com/ghacksuserjs/ghacks-user.js/blob/master/LICENSE.txt * license: MIT: https://github.com/ghacksuserjs/ghacks-user.js/blob/master/LICENSE.txt
@ -20,13 +20,13 @@
2. READ this 2. READ this
* https://github.com/ghacksuserjs/ghacks-user.js/wiki/1.3-Implementation * https://github.com/ghacksuserjs/ghacks-user.js/wiki/1.3-Implementation
3. If you skipped steps 1 and 2 above (shame on you), then here is the absolute minimum 3. If you skipped steps 1 and 2 above (shame on you), then here is the absolute minimum
* Real time binary checks with Google services are disabled (0402) * Real time binary checks with Google services are disabled (0412)
* You will still get prompts to update Firefox, but auto-installing them is disabled (0302a) * You will still get prompts to update Firefox, but auto-installing them is disabled (0302a)
* Some user data is erased on close (section 2800). Change this to suit your needs * Some user data is erased on close (section 2800). Change this to suit your needs
* EACH RELEASE check: * EACH RELEASE check:
- 4600s: reset prefs made redundant due to privacy.resistFingerprinting (RPF) - 4600s: reset prefs made redundant due to privacy.resistFingerprinting (RPF)
or enable them as an alternative to RFP or for ESR users or enable them as an alternative to RFP (or some of them for ESR users)
- 9999s: reset deprecated prefs in about:config or enable relevant section(s) for ESR - 9999s: reset deprecated prefs in about:config or enable the relevant section for ESR
* Site breakage WILL happen * Site breakage WILL happen
- There are often trade-offs and conflicts between Security vs Privacy vs Anti-Fingerprinting - There are often trade-offs and conflicts between Security vs Privacy vs Anti-Fingerprinting
and these need to be balanced against Functionality & Convenience & Breakage and these need to be balanced against Functionality & Convenience & Breakage
@ -45,7 +45,7 @@
* INDEX: * INDEX:
0100: STARTUP 0100: STARTUP
0200: GEOLOCATION 0200: GEOLOCATION / LANGUAGE / LOCALE
0300: QUIET FOX 0300: QUIET FOX
0400: BLOCKLISTS / SAFE BROWSING 0400: BLOCKLISTS / SAFE BROWSING
0500: SYSTEM ADD-ONS / EXPERIMENTS 0500: SYSTEM ADD-ONS / EXPERIMENTS
@ -112,8 +112,8 @@ user_pref("browser.newtabpage.activity-stream.telemetry.ping.endpoint", "");
/* 0105b: disable Activity Stream Snippets /* 0105b: disable Activity Stream Snippets
* Runs code received from a server (aka Remote Code Execution) and sends information back to a metrics server * Runs code received from a server (aka Remote Code Execution) and sends information back to a metrics server
* [1] https://abouthome-snippets-service.readthedocs.io/ ***/ * [1] https://abouthome-snippets-service.readthedocs.io/ ***/
user_pref("browser.newtabpage.activity-stream.asrouter.providers.snippets", "");
user_pref("browser.newtabpage.activity-stream.feeds.snippets", false); user_pref("browser.newtabpage.activity-stream.feeds.snippets", false);
user_pref("browser.newtabpage.activity-stream.asrouter.providers.snippets", "");
/* 0105c: disable Activity Stream Top Stories, Pocket-based and/or sponsored content ***/ /* 0105c: disable Activity Stream Top Stories, Pocket-based and/or sponsored content ***/
user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false); user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false);
user_pref("browser.newtabpage.activity-stream.section.highlights.includePocket", false); user_pref("browser.newtabpage.activity-stream.section.highlights.includePocket", false);
@ -133,49 +133,52 @@ user_pref("browser.newtabpage.activity-stream.feeds.discoverystreamfeed", false)
* [2] https://spreadprivacy.com/is-private-browsing-really-private/ ***/ * [2] https://spreadprivacy.com/is-private-browsing-really-private/ ***/
// user_pref("browser.privatebrowsing.autostart", true); // user_pref("browser.privatebrowsing.autostart", true);
/*** [SECTION 0200]: GEOLOCATION ***/ /*** [SECTION 0200]: GEOLOCATION / LANGUAGE / LOCALE ***/
user_pref("_user.js.parrot", "0200 syntax error: the parrot's definitely deceased!"); user_pref("_user.js.parrot", "0200 syntax error: the parrot's definitely deceased!");
/** GEOLOCATION ***/
/* 0201: disable Location-Aware Browsing /* 0201: disable Location-Aware Browsing
* [NOTE] Best left at default "true", fingerprintable, is already behind a prompt (see 0202)
* [1] https://www.mozilla.org/firefox/geolocation/ ***/ * [1] https://www.mozilla.org/firefox/geolocation/ ***/
// user_pref("geo.enabled", false); // user_pref("geo.enabled", false);
/* 0201b: set a default permission for Location [FF58+] /* 0202: set a default permission for Location (see 0201) [FF58+]
* 0=always ask (default), 1=allow, 2=block * 0=always ask (default), 1=allow, 2=block
* [NOTE] Best left at default "always ask", fingerprintable via Permissions API * [NOTE] Best left at default "always ask", fingerprintable via Permissions API
* [SETTING] to add site exceptions: Page Info>Permissions>Access Your Location * [SETTING] to add site exceptions: Page Info>Permissions>Access Your Location
* [SETTING] to manage site exceptions: Options>Privacy & Security>Permissions>Location>Settings ***/ * [SETTING] to manage site exceptions: Options>Privacy & Security>Permissions>Location>Settings ***/
// user_pref("permissions.default.geo", 2); // user_pref("permissions.default.geo", 2);
/* 0202: disable GeoIP-based search results /* 0203: use Mozilla geolocation service instead of Google when geolocation is enabled
* Optionally enable logging to the console (defaults to false) ***/
user_pref("geo.wifi.uri", "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%");
// user_pref("geo.wifi.logging.enabled", true); // [HIDDEN PREF]
/* 0204: disable using the OS's geolocation service ***/
user_pref("geo.provider.ms-windows-location", false); // [WINDOWS]
user_pref("geo.provider.use_corelocation", false); // [MAC]
user_pref("geo.provider.use_gpsd", false); // [LINUX]
/* 0205: disable GeoIP-based search results
* [NOTE] May not be hidden if Firefox has changed your settings due to your locale * [NOTE] May not be hidden if Firefox has changed your settings due to your locale
* [1] https://trac.torproject.org/projects/tor/ticket/16254 * [1] https://trac.torproject.org/projects/tor/ticket/16254
* [2] https://support.mozilla.org/en-US/kb/how-stop-firefox-making-automatic-connections#w_geolocation-for-default-search-engine ***/ * [2] https://support.mozilla.org/en-US/kb/how-stop-firefox-making-automatic-connections#w_geolocation-for-default-search-engine ***/
user_pref("browser.search.region", "US"); // [HIDDEN PREF] user_pref("browser.search.region", "US"); // [HIDDEN PREF]
user_pref("browser.search.geoip.url", ""); user_pref("browser.search.geoip.url", "");
/* 0205: set Firefox language [FF59+] [RESTART]
* Go to the end of about:support to view Internationalization & Localization settings
* If set to empty, the OS locales are used. If not set at all, default locale is used
* This is the language used in menus, about pages, messages, and notifications from Firefox ***/
// user_pref("intl.locale.requested", "en-US"); // [HIDDEN PREF]
/* 0206: disable geographically specific results/search engines e.g. "browser.search.*.US" /* 0206: disable geographically specific results/search engines e.g. "browser.search.*.US"
* i.e. ignore all of Mozilla's various search engines in multiple locales ***/ * i.e. ignore all of Mozilla's various search engines in multiple locales ***/
user_pref("browser.search.geoSpecificDefaults", false); user_pref("browser.search.geoSpecificDefaults", false);
user_pref("browser.search.geoSpecificDefaults.url", ""); user_pref("browser.search.geoSpecificDefaults.url", "");
/* 0207: set preferred language for diplaying web pages
/** LANGUAGE / LOCALE ***/
/* 0210: set preferred language for displaying web pages
* [TEST] https://addons.mozilla.org/about ***/ * [TEST] https://addons.mozilla.org/about ***/
user_pref("intl.accept_languages", "en-US, en"); user_pref("intl.accept_languages", "en-US, en");
/* 0208: enforce US English locale regardless of the system locale /* 0211: enforce US English locale regardless of the system locale
* [1] https://bugzilla.mozilla.org/867501 ***/ * [1] https://bugzilla.mozilla.org/867501 ***/
user_pref("javascript.use_us_english_locale", true); // [HIDDEN PREF] user_pref("javascript.use_us_english_locale", true); // [HIDDEN PREF]
/* 0209: use APP locale over OS locale in regional preferences [FF56+] /* 0212: enforce fallback text encoding to match en-US
* [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1379420,1364789 ***/ * When the content or server doesn't declare a charset the browser will
user_pref("intl.regional_prefs.use_os_locales", false); * fallback to the "Current locale" based on your application language
/* 0210: use Mozilla geolocation service instead of Google when geolocation is enabled * [SETTING] General>Language and Appearance>Fonts and Colors>Advanced>Text Encoding for Legacy Content
* Optionally enable logging to the console (defaults to false) ***/ * [TEST] https://hsivonen.com/test/moz/check-charset.htm
user_pref("geo.wifi.uri", "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%"); * [1] https://trac.torproject.org/projects/tor/ticket/20025 ***/
// user_pref("geo.wifi.logging.enabled", true); // [HIDDEN PREF] user_pref("intl.charset.fallback.override", "windows-1252");
/* 0211: disable using the OS's geolocation service ***/
user_pref("geo.provider.ms-windows-location", false); // [WINDOWS]
user_pref("geo.provider.use_corelocation", false); // [MAC]
user_pref("geo.provider.use_gpsd", false); // [LINUX]
/*** [SECTION 0300]: QUIET FOX /*** [SECTION 0300]: QUIET FOX
Starting in user.js v67, we only disable the auto-INSTALL of Firefox. You still get prompts Starting in user.js v67, we only disable the auto-INSTALL of Firefox. You still get prompts
@ -209,17 +212,14 @@ user_pref("dom.ipc.plugins.flash.subprocess.crashreporter.enabled", false);
user_pref("dom.ipc.plugins.reportCrashURL", false); user_pref("dom.ipc.plugins.reportCrashURL", false);
/* 0320: disable about:addons' Recommendations pane (uses Google Analytics) ***/ /* 0320: disable about:addons' Recommendations pane (uses Google Analytics) ***/
user_pref("extensions.getAddons.showPane", false); // [HIDDEN PREF] user_pref("extensions.getAddons.showPane", false); // [HIDDEN PREF]
user_pref("extensions.webservice.discoverURL", "");
/* 0321: disable recommendations in about:addons' Extensions and Themes panes [FF68+] ***/ /* 0321: disable recommendations in about:addons' Extensions and Themes panes [FF68+] ***/
user_pref("extensions.getAddons.discovery.api_url", "");
user_pref("extensions.htmlaboutaddons.discover.enabled", false);
user_pref("extensions.htmlaboutaddons.recommendations.enabled", false); user_pref("extensions.htmlaboutaddons.recommendations.enabled", false);
/* 0330: disable telemetry /* 0330: disable telemetry
* the pref (.unified) affects the behaviour of the pref (.enabled) * the pref (.unified) affects the behaviour of the pref (.enabled)
* IF unified=false then .enabled controls the telemetry module * IF unified=false then .enabled controls the telemetry module
* IF unified=true then .enabled ONLY controls whether to record extended data * IF unified=true then .enabled ONLY controls whether to record extended data
* so make sure to have both set as false * so make sure to have both set as false
* [NOTE] FF58+ `toolkit.telemetry.enabled` is now LOCKED to reflect prerelease * [NOTE] FF58+ 'toolkit.telemetry.enabled' is now LOCKED to reflect prerelease
* or release builds (true and false respectively), see [2] * or release builds (true and false respectively), see [2]
* [1] https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/telemetry/internals/preferences.html * [1] https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/telemetry/internals/preferences.html
* [2] https://medium.com/georg-fritzsche/data-preference-changes-in-firefox-58-2d5df9c428b5 ***/ * [2] https://medium.com/georg-fritzsche/data-preference-changes-in-firefox-58-2d5df9c428b5 ***/
@ -246,8 +246,7 @@ user_pref("datareporting.healthreport.uploadEnabled", false);
* [1] https://bugzilla.mozilla.org/1195552 ***/ * [1] https://bugzilla.mozilla.org/1195552 ***/
user_pref("datareporting.policy.dataSubmissionEnabled", false); user_pref("datareporting.policy.dataSubmissionEnabled", false);
/* 0342: disable Studies (see 0503) /* 0342: disable Studies (see 0503)
* [NOTE] This pref has no effect when Health Reports (0340) are disabled * [SETTING] Privacy & Security>Firefox Data Collection & Use>Allow Firefox to install and run studies ***/
* [SETTING] Privacy & Security>Firefox Data Collection & Use>...>Allow Firefox to install and run studies ***/
user_pref("app.shield.optoutstudies.enabled", false); user_pref("app.shield.optoutstudies.enabled", false);
/* 0343: disable personalized Extension Recommendations in about:addons and AMO [FF65+] /* 0343: disable personalized Extension Recommendations in about:addons and AMO [FF65+]
* [NOTE] This pref has no effect when Health Reports (0340) are disabled * [NOTE] This pref has no effect when Health Reports (0340) are disabled
@ -261,11 +260,6 @@ user_pref("browser.crashReports.unsubmittedCheck.enabled", false); // [FF51+]
/* 0351: disable backlogged Crash Reports /* 0351: disable backlogged Crash Reports
* [SETTING] Privacy & Security>Firefox Data Collection & Use>Allow Firefox to send backlogged crash reports ***/ * [SETTING] Privacy & Security>Firefox Data Collection & Use>Allow Firefox to send backlogged crash reports ***/
user_pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false); // [FF58+] user_pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false); // [FF58+]
/* 0370: disable Pocket [FF46+]
* Pocket is a third party (now owned by Mozilla) "save for later" cloud service
* [1] https://en.wikipedia.org/wiki/Pocket_(application)
* [2] https://www.gnu.gl/blog/Posts/multiple-vulnerabilities-in-pocket/ ***/
user_pref("extensions.pocket.enabled", false);
/* 0390: disable Captive Portal detection /* 0390: disable Captive Portal detection
* [1] https://www.eff.org/deeplinks/2017/08/how-captive-portals-interfere-wireless-security-and-privacy * [1] https://www.eff.org/deeplinks/2017/08/how-captive-portals-interfere-wireless-security-and-privacy
* [2] https://wiki.mozilla.org/Necko/CaptivePortal ***/ * [2] https://wiki.mozilla.org/Necko/CaptivePortal ***/
@ -275,7 +269,17 @@ user_pref("network.captive-portal-service.enabled", false); // [FF52+]
* [1] https://bugzilla.mozilla.org/1460537 ***/ * [1] https://bugzilla.mozilla.org/1460537 ***/
user_pref("network.connectivity-service.enabled", false); user_pref("network.connectivity-service.enabled", false);
/*** [SECTION 0400]: BLOCKLISTS / SAFE BROWSING (SB) /*** [SECTION 0400]: BLOCKLISTS / SAFE BROWSING (SB) ***/
user_pref("_user.js.parrot", "0400 syntax error: the parrot's passed on!");
/** BLOCKLISTS ***/
/* 0401: enforce Firefox blocklist, but sanitize blocklist url
* [NOTE] It includes updates for "revoked certificates"
* [1] https://blog.mozilla.org/security/2015/03/03/revoking-intermediate-certificates-introducing-onecrl/
* [2] https://trac.torproject.org/projects/tor/ticket/16931 ***/
user_pref("extensions.blocklist.enabled", true); // [DEFAULT: true]
user_pref("extensions.blocklist.url", "https://blocklists.settings.services.mozilla.com/v1/blocklist/3/%APP_ID%/%APP_VERSION%/");
/** SAFE BROWSING (SB)
Safe Browsing has taken many steps to preserve privacy. *IF* required, a full url is never Safe Browsing has taken many steps to preserve privacy. *IF* required, a full url is never
sent to Google, only a PART-hash of the prefix, and this is hidden with noise of other real sent to Google, only a PART-hash of the prefix, and this is hidden with noise of other real
PART-hashes. Google also swear it is anonymized and only used to flag malicious sites. PART-hashes. Google also swear it is anonymized and only used to flag malicious sites.
@ -284,19 +288,29 @@ user_pref("network.connectivity-service.enabled", false);
#Required reading [#] https://feeding.cloud.geek.nz/posts/how-safe-browsing-works-in-firefox/ #Required reading [#] https://feeding.cloud.geek.nz/posts/how-safe-browsing-works-in-firefox/
[1] https://wiki.mozilla.org/Security/Safe_Browsing [1] https://wiki.mozilla.org/Security/Safe_Browsing
[2] https://support.mozilla.org/en-US/kb/how-does-phishing-and-malware-protection-work
***/ ***/
user_pref("_user.js.parrot", "0400 syntax error: the parrot's passed on!"); /* 0410: disable SB (Safe Browsing)
/* 0401: enforce Firefox blocklist, but sanitize blocklist url * [WARNING] Do this at your own risk! These are the master switches.
* [NOTE] It includes updates for "revoked certificates" * [SETTING] Privacy & Security>Security>... "Block dangerous and deceptive content" ***/
* [1] https://blog.mozilla.org/security/2015/03/03/revoking-intermediate-certificates-introducing-onecrl/ // user_pref("browser.safebrowsing.malware.enabled", false);
* [2] https://trac.torproject.org/projects/tor/ticket/16931 ***/ // user_pref("browser.safebrowsing.phishing.enabled", false);
user_pref("extensions.blocklist.enabled", true); // [DEFAULT: true] /* 0411: disable SB checks for downloads (both local lookups + remote)
user_pref("extensions.blocklist.url", "https://blocklists.settings.services.mozilla.com/v1/blocklist/3/%APP_ID%/%APP_VERSION%/"); * This is the master switch for the safebrowsing.downloads* prefs (0412, 0413)
/* 0402: disable binaries NOT in Safe Browsing local lists being checked * [SETTING] Privacy & Security>Security>... "Block dangerous downloads" ***/
* This is a real-time check with Google services // user_pref("browser.safebrowsing.downloads.enabled", false);
* [SETUP-SECURITY] If you do not understand this, or if you want this protection, then override it ***/ /* 0412: disable SB checks for downloads (remote)
* To verify the safety of certain executable files, Firefox may submit some information about the
* file, including the name, origin, size and a cryptographic hash of the contents, to the Google
* Safe Browsing service which helps Firefox determine whether or not the file should be blocked
* [SETUP-SECURITY] If you do not understand this, or you want this protection, then override it ***/
user_pref("browser.safebrowsing.downloads.remote.enabled", false); user_pref("browser.safebrowsing.downloads.remote.enabled", false);
/* 0403: disable 'ignore this warning' on Safe Browsing warnings user_pref("browser.safebrowsing.downloads.remote.url", "");
/* 0413: disable SB checks for unwanted software
* [SETTING] Privacy & Security>Security>... "Warn you about unwanted and uncommon software" ***/
// user_pref("browser.safebrowsing.downloads.remote.block_potentially_unwanted", false);
// user_pref("browser.safebrowsing.downloads.remote.block_uncommon", false);
/* 0419: disable 'ignore this warning' on SB warnings
* If clicked, it bypasses the block for that session. This is a means for admins to enforce SB * If clicked, it bypasses the block for that session. This is a means for admins to enforce SB
* [TEST] see github wiki APPENDIX A: Test Sites: Section 5 * [TEST] see github wiki APPENDIX A: Test Sites: Section 5
* [1] https://bugzilla.mozilla.org/1226490 ***/ * [1] https://bugzilla.mozilla.org/1226490 ***/
@ -360,7 +374,7 @@ user_pref("network.prefetch-next", false);
* [1] https://www.ghacks.net/2013/04/27/firefox-prefetching-what-you-need-to-know/ * [1] https://www.ghacks.net/2013/04/27/firefox-prefetching-what-you-need-to-know/
* [2] https://developer.mozilla.org/docs/Web/HTTP/Headers/X-DNS-Prefetch-Control ***/ * [2] https://developer.mozilla.org/docs/Web/HTTP/Headers/X-DNS-Prefetch-Control ***/
user_pref("network.dns.disablePrefetch", true); user_pref("network.dns.disablePrefetch", true);
user_pref("network.dns.disablePrefetchFromHTTPS", true); // [HIDDEN PREF] user_pref("network.dns.disablePrefetchFromHTTPS", true); // [HIDDEN PREF ESR] [DEFAULT: true FF70+]
/* 0603: disable predictor / prefetching ***/ /* 0603: disable predictor / prefetching ***/
user_pref("network.predictor.enabled", false); user_pref("network.predictor.enabled", false);
user_pref("network.predictor.enable-prefetch", false); // [FF48+] user_pref("network.predictor.enable-prefetch", false); // [FF48+]
@ -368,9 +382,8 @@ user_pref("network.predictor.enable-prefetch", false); // [FF48+]
* [1] https://news.slashdot.org/story/15/08/14/2321202/how-to-quash-firefoxs-silent-requests * [1] https://news.slashdot.org/story/15/08/14/2321202/how-to-quash-firefoxs-silent-requests
* [2] https://www.ghacks.net/2015/08/16/block-firefox-from-connecting-to-sites-when-you-hover-over-links/ ***/ * [2] https://www.ghacks.net/2015/08/16/block-firefox-from-connecting-to-sites-when-you-hover-over-links/ ***/
user_pref("network.http.speculative-parallel-limit", 0); user_pref("network.http.speculative-parallel-limit", 0);
/* 0606: disable pings (but enforce same host in case) /* 0606: disable "Hyperlink Auditing" (click tracking) and enforce same host in case
* [1] http://kb.mozillazine.org/Browser.send_pings * [1] https://www.bleepingcomputer.com/news/software/major-browsers-to-prevent-disabling-of-click-tracking-privacy-risk/ ***/
* [2] http://kb.mozillazine.org/Browser.send_pings.require_same_host ***/
user_pref("browser.send_pings", false); // [DEFAULT: false] user_pref("browser.send_pings", false); // [DEFAULT: false]
user_pref("browser.send_pings.require_same_host", true); user_pref("browser.send_pings.require_same_host", true);
@ -382,8 +395,8 @@ user_pref("_user.js.parrot", "0700 syntax error: the parrot's given up the ghost
* Firefox telemetry (April 2019) shows only 5% of all connections are IPv6. * Firefox telemetry (April 2019) shows only 5% of all connections are IPv6.
* [NOTE] This is just an application level fallback. Disabling IPv6 is best done at an * [NOTE] This is just an application level fallback. Disabling IPv6 is best done at an
* OS/network level, and/or configured properly in VPN setups. If you are not masking your IP, * OS/network level, and/or configured properly in VPN setups. If you are not masking your IP,
* then this won't make much difference. If you are maksing your IP, then it can only help. * then this won't make much difference. If you are masking your IP, then it can only help.
* [TEST] http://ipv6leak.com/ * [TEST] https://ipleak.org/
* [1] https://github.com/ghacksuserjs/ghacks-user.js/issues/437#issuecomment-403740626 * [1] https://github.com/ghacksuserjs/ghacks-user.js/issues/437#issuecomment-403740626
* [2] https://www.internetsociety.org/tag/ipv6-security/ (see Myths 2,4,5,6) ***/ * [2] https://www.internetsociety.org/tag/ipv6-security/ (see Myths 2,4,5,6) ***/
user_pref("network.dns.disableIPv6", true); user_pref("network.dns.disableIPv6", true);
@ -412,18 +425,8 @@ user_pref("network.http.altsvc.oe", false);
/* 0704: enforce the proxy server to do any DNS lookups when using SOCKS /* 0704: enforce the proxy server to do any DNS lookups when using SOCKS
* e.g. in Tor, this stops your local DNS server from knowing your Tor destination * e.g. in Tor, this stops your local DNS server from knowing your Tor destination
* as a remote Tor node will handle the DNS request * as a remote Tor node will handle the DNS request
* [1] http://kb.mozillazine.org/Network.proxy.socks_remote_dns * [1] https://trac.torproject.org/projects/tor/wiki/doc/TorifyHOWTO/WebBrowsers ***/
* [2] https://trac.torproject.org/projects/tor/wiki/doc/TorifyHOWTO/WebBrowsers ***/
user_pref("network.proxy.socks_remote_dns", true); user_pref("network.proxy.socks_remote_dns", true);
/* 0707: disable (or setup) DNS-over-HTTPS (DoH) [FF60+]
* TRR = Trusted Recursive Resolver
* .mode: 0=off, 1=race, 2=TRR first, 3=TRR only, 4=race for stats but always use native result
* [WARNING] DoH bypasses hosts and gives info to yet another party (e.g. Cloudflare)
* [1] https://www.ghacks.net/2018/04/02/configure-dns-over-https-in-firefox/
* [2] https://hacks.mozilla.org/2018/05/a-cartoon-intro-to-dns-over-https/ ***/
// user_pref("network.trr.mode", 0);
// user_pref("network.trr.bootstrapAddress", "");
// user_pref("network.trr.uri", "");
/* 0708: disable FTP [FF60+] /* 0708: disable FTP [FF60+]
* [1] https://www.ghacks.net/2018/02/20/firefox-60-with-new-preference-to-disable-ftp/ ***/ * [1] https://www.ghacks.net/2018/02/20/firefox-60-with-new-preference-to-disable-ftp/ ***/
// user_pref("network.ftp.enabled", false); // user_pref("network.ftp.enabled", false);
@ -468,15 +471,10 @@ user_pref("keyword.enabled", false);
user_pref("browser.fixup.alternate.enabled", false); user_pref("browser.fixup.alternate.enabled", false);
/* 0803: display all parts of the url in the location bar ***/ /* 0803: display all parts of the url in the location bar ***/
user_pref("browser.urlbar.trimURLs", false); user_pref("browser.urlbar.trimURLs", false);
/* 0804: limit history leaks via enumeration (PER TAB: back/forward) /* 0805: disable coloring of visited links - CSS history leak
* This is a PER TAB session history. You still have a full history stored under all history
* default=50, minimum=1=currentpage, 2 is the recommended minimum as some pages
* use it as a means of referral (e.g. hotlinking), 4 or 6 or 10 may be more practical ***/
user_pref("browser.sessionhistory.max_entries", 10);
/* 0805: disable CSS querying page history - CSS history leak
* [NOTE] This has NEVER been fully "resolved": in Mozilla/docs it is stated it's * [NOTE] This has NEVER been fully "resolved": in Mozilla/docs it is stated it's
* only in 'certain circumstances', also see latest comments in [2] * only in 'certain circumstances', also see latest comments in [2]
* [TEST] http://lcamtuf.coredump.cx/yahh/ (see github wiki APPENDIX A on how to use) * [TEST] https://earthlng.github.io/testpages/visited_links.html (see github wiki APPENDIX A on how to use)
* [1] https://dbaron.org/mozilla/visited-privacy * [1] https://dbaron.org/mozilla/visited-privacy
* [2] https://bugzilla.mozilla.org/147777 * [2] https://bugzilla.mozilla.org/147777
* [3] https://developer.mozilla.org/docs/Web/CSS/Privacy_and_the_:visited_selector ***/ * [3] https://developer.mozilla.org/docs/Web/CSS/Privacy_and_the_:visited_selector ***/
@ -508,7 +506,7 @@ user_pref("browser.urlbar.speculativeConnect.enabled", false);
* (i.e. at least one of 0850a suggestion types must be true) but you want to *limit* suggestions shown ***/ * (i.e. at least one of 0850a suggestion types must be true) but you want to *limit* suggestions shown ***/
// user_pref("browser.urlbar.maxRichResults", 0); // user_pref("browser.urlbar.maxRichResults", 0);
/* 0850d: disable location bar autofill /* 0850d: disable location bar autofill
* [1] http://kb.mozillazine.org/Inline_autocomplete ***/ * [1] https://support.mozilla.org/en-US/kb/address-bar-autocomplete-firefox#w_url-autocomplete ***/
// user_pref("browser.urlbar.autoFill", false); // user_pref("browser.urlbar.autoFill", false);
/* 0850e: disable location bar one-off searches [FF51+] /* 0850e: disable location bar one-off searches [FF51+]
* [1] https://www.ghacks.net/2016/08/09/firefox-one-off-searches-address-bar/ ***/ * [1] https://www.ghacks.net/2016/08/09/firefox-one-off-searches-address-bar/ ***/
@ -548,9 +546,8 @@ user_pref("security.ask_for_password", 2);
* in minutes, default is 30 ***/ * in minutes, default is 30 ***/
user_pref("security.password_lifetime", 5); user_pref("security.password_lifetime", 5);
/* 0905: disable auto-filling username & password form fields /* 0905: disable auto-filling username & password form fields
* can leak in cross-site forms AND be spoofed * can leak in cross-site forms *and* be spoofed
* [NOTE] Password will still be auto-filled after a user name is manually entered * [NOTE] Username & password is still available when you enter the field ***/
* [1] http://kb.mozillazine.org/Signon.autofillForms ***/
user_pref("signon.autofillForms", false); user_pref("signon.autofillForms", false);
/* 0909: disable formless login capture for Password Manager [FF51+] ***/ /* 0909: disable formless login capture for Password Manager [FF51+] ***/
user_pref("signon.formlessCapture.enabled", false); user_pref("signon.formlessCapture.enabled", false);
@ -563,16 +560,20 @@ user_pref("signon.formlessCapture.enabled", false);
user_pref("network.auth.subresource-http-auth-allow", 1); user_pref("network.auth.subresource-http-auth-allow", 1);
/*** [SECTION 1000]: CACHE / SESSION (RE)STORE / FAVICONS /*** [SECTION 1000]: CACHE / SESSION (RE)STORE / FAVICONS
ETAG [1] and other [2][3] cache tracking/fingerprinting techniques can be averted by Cache tracking/fingerprinting techniques [1][2][3] require a cache. Disabling disk (1001)
disabling *BOTH* disk (1001) and memory (1003) cache. ETAGs can also be neutralized *and* memory (1003) caches is one solution; but that's extreme and fingerprintable. A hardened
by modifying response headers [4]. Another solution is to use a hardened configuration Temporary Containers configuration can effectively do the same thing, by isolating every tab [4].
with Temporary Containers [5]. Alternatively, you can *LIMIT* exposure by clearing
cache on close (2803). or on a regular basis manually or with an extension. We consider avoiding disk cache (1001) so cache is session/memory only (like Private Browsing
mode), and isolating cache to first party (4001) is sufficient and a good balance between
risk and performance. ETAGs can also be neutralized by modifying response headers [5], and
you can clear the cache manually or on a regular basis with an extension.
[1] https://en.wikipedia.org/wiki/HTTP_ETag#Tracking_using_ETags [1] https://en.wikipedia.org/wiki/HTTP_ETag#Tracking_using_ETags
[2] https://robertheaton.com/2014/01/20/cookieless-user-tracking-for-douchebags/ [2] https://robertheaton.com/2014/01/20/cookieless-user-tracking-for-douchebags/
[3] https://www.grepular.com/Preventing_Web_Tracking_via_the_Browser_Cache [3] https://www.grepular.com/Preventing_Web_Tracking_via_the_Browser_Cache
[4] https://github.com/ghacksuserjs/ghacks-user.js/wiki/4.2.4-Header-Editor [4] https://medium.com/@stoically/enhance-your-privacy-in-firefox-with-temporary-containers-33925cd6cd21
[5] https://medium.com/@stoically/enhance-your-privacy-in-firefox-with-temporary-containers-33925cd6cd21 [5] https://github.com/ghacksuserjs/ghacks-user.js/wiki/4.2.4-Header-Editor
***/ ***/
user_pref("_user.js.parrot", "1000 syntax error: the parrot's gone to meet 'is maker!"); user_pref("_user.js.parrot", "1000 syntax error: the parrot's gone to meet 'is maker!");
/** CACHE ***/ /** CACHE ***/
@ -581,14 +582,10 @@ user_pref("_user.js.parrot", "1000 syntax error: the parrot's gone to meet 'is m
* or you use a hardened Temporary Containers, then feel free to override this * or you use a hardened Temporary Containers, then feel free to override this
* [NOTE] We also clear cache on exiting Firefox (see 2803) ***/ * [NOTE] We also clear cache on exiting Firefox (see 2803) ***/
user_pref("browser.cache.disk.enable", false); user_pref("browser.cache.disk.enable", false);
/* 1002: disable disk cache for SSL pages
* [1] http://kb.mozillazine.org/Browser.cache.disk_cache_ssl ***/
user_pref("browser.cache.disk_cache_ssl", false);
/* 1003: disable memory cache /* 1003: disable memory cache
/* capacity: -1=determine dynamically (default), 0=none, n=memory capacity in kilobytes /* capacity: -1=determine dynamically (default), 0=none, n=memory capacity in kilobytes ***/
* [NOTE] Not recommended due to performance issues ***/
// user_pref("browser.cache.memory.enable", false); // user_pref("browser.cache.memory.enable", false);
// user_pref("browser.cache.memory.capacity", 0); // [HIDDEN PREF] // user_pref("browser.cache.memory.capacity", 0); // [HIDDEN PREF ESR]
/* 1006: disable permissions manager from writing to disk [RESTART] /* 1006: disable permissions manager from writing to disk [RESTART]
* [NOTE] This means any permission changes are session only * [NOTE] This means any permission changes are session only
* [1] https://bugzilla.mozilla.org/967812 ***/ * [1] https://bugzilla.mozilla.org/967812 ***/
@ -629,28 +626,20 @@ user_pref("browser.shell.shortcutFavicons", false);
user_pref("alerts.showFavicons", false); // [DEFAULT: false] user_pref("alerts.showFavicons", false); // [DEFAULT: false]
/*** [SECTION 1200]: HTTPS (SSL/TLS / OCSP / CERTS / HPKP / CIPHERS) /*** [SECTION 1200]: HTTPS (SSL/TLS / OCSP / CERTS / HPKP / CIPHERS)
Note that your cipher and other settings can be used server side as a fingerprint attack Your cipher and other settings can be used in server side fingerprinting
vector, see [1] (It's quite technical but the first part is easy to understand [TEST] https://www.ssllabs.com/ssltest/viewMyClient.html
and you can stop reading when you reach the second section titled "Enter Bro")
Option 1: Use defaults for ciphers (1260's). There is nothing *weak* about these, but
due to breakage, browsers can't deprecate them until the web stops using them
Option 2: Disable the ciphers in 1261, 1262 and 1263. These shouldn't break anything.
Optionally, disable the ciphers in 1264.
[1] https://www.securityartwork.es/2017/02/02/tls-client-fingerprinting-with-bro/ [1] https://www.securityartwork.es/2017/02/02/tls-client-fingerprinting-with-bro/
***/ ***/
user_pref("_user.js.parrot", "1200 syntax error: the parrot's a stiff!"); user_pref("_user.js.parrot", "1200 syntax error: the parrot's a stiff!");
/** SSL (Secure Sockets Layer) / TLS (Transport Layer Security) ***/ /** SSL (Secure Sockets Layer) / TLS (Transport Layer Security) ***/
/* 1201: disable old SSL/TLS "insecure" renegotiation (vulnerable to a MiTM attack) /* 1201: disable old SSL/TLS "insecure" negotiation (vulnerable to a MiTM attack)
* [SETUP-WEB] <2% of secure sites do NOT support the newer "secure" renegotiation, see [2] * [1] https://wiki.mozilla.org/Security:Renegotiation ***/
* [1] https://wiki.mozilla.org/Security:Renegotiation
* [2] https://www.ssllabs.com/ssl-pulse/ ***/
user_pref("security.ssl.require_safe_negotiation", true); user_pref("security.ssl.require_safe_negotiation", true);
/* 1202: control TLS versions with min and max /* 1202: control TLS versions with min and max
* 1=TLS 1.0, 2=TLS 1.1, 3=TLS 1.2, 4=TLS 1.3 * 1=TLS 1.0, 2=TLS 1.1, 3=TLS 1.2, 4=TLS 1.3
* [WARNING] Leave these at default, otherwise you alter your TLS fingerprint. * [WARNING] Leave these at default, otherwise you alter your TLS fingerprint.
* Firefox telemetry (April 2019) shows only 0.5% of TLS web traffic uses 1.0 or 1.1 ***/ * Firefox telemetry (April 2019) shows only 0.5% of TLS web traffic uses 1.0 or 1.1
* [1] https://www.ssllabs.com/ssl-pulse/ ***/
// user_pref("security.tls.version.min", 3); // user_pref("security.tls.version.min", 3);
// user_pref("security.tls.version.max", 4); // user_pref("security.tls.version.max", 4);
/* 1203: disable SSL session tracking [FF36+] /* 1203: disable SSL session tracking [FF36+]
@ -710,12 +699,10 @@ user_pref("security.pki.sha1_enforcement_level", 1);
* 2=detect Family Safety mode and import the root * 2=detect Family Safety mode and import the root
* [1] https://trac.torproject.org/projects/tor/ticket/21686 ***/ * [1] https://trac.torproject.org/projects/tor/ticket/21686 ***/
user_pref("security.family_safety.mode", 0); user_pref("security.family_safety.mode", 0);
/* 1222: disable intermediate certificate caching (fingerprinting attack vector) [RESTART] /* 1222: disable intermediate certificate caching (fingerprinting attack vector) [FF41+] [RESTART]
* [NOTE] This affects login/cert/key dbs. The effect is all credentials are session-only. * [NOTE] This affects login/cert/key dbs. The effect is all credentials are session-only.
* Saved logins and passwords are not available. Reset the pref and restart to return them. * Saved logins and passwords are not available. Reset the pref and restart to return them.
* [TEST] https://fiprinca.0x90.eu/poc/ * [1] https://shiftordie.de/blog/2017/02/21/fingerprinting-firefox-users-with-cached-intermediate-ca-certificates-fiprinca/ ***/
* [1] https://bugzilla.mozilla.org/1334485 - related bug
* [2] https://bugzilla.mozilla.org/1216882 - related bug (see comment 9) ***/
// user_pref("security.nocertdb", true); // [HIDDEN PREF] // user_pref("security.nocertdb", true); // [HIDDEN PREF]
/* 1223: enforce strict pinning /* 1223: enforce strict pinning
* PKP (Public Key Pinning) 0=disabled 1=allow user MiTM (such as your antivirus), 2=strict * PKP (Public Key Pinning) 0=disabled 1=allow user MiTM (such as your antivirus), 2=strict
@ -734,10 +721,10 @@ user_pref("security.mixed_content.block_display_content", true);
* [1] https://bugzilla.mozilla.org/1190623 ***/ * [1] https://bugzilla.mozilla.org/1190623 ***/
user_pref("security.mixed_content.block_object_subrequest", true); user_pref("security.mixed_content.block_object_subrequest", true);
/** CIPHERS [see the section 1200 intro] ***/ /** CIPHERS [WARNING: do not meddle with your cipher suite: see the section 1200 intro] ***/
/* 1261: disable 3DES (effective key size < 128) /* 1261: disable 3DES (effective key size < 128)
* [1] https://en.wikipedia.org/wiki/3des#Security * [1] https://en.wikipedia.org/wiki/3des#Security
* [2] http://en.citizendium.org/wiki/Meet-in-the-middle_attack * [2] https://en.wikipedia.org/wiki/Meet-in-the-middle_attack
* [3] https://www-archive.mozilla.org/projects/security/pki/nss/ssl/fips-ssl-ciphersuites.html ***/ * [3] https://www-archive.mozilla.org/projects/security/pki/nss/ssl/fips-ssl-ciphersuites.html ***/
// user_pref("security.ssl3.rsa_des_ede3_sha", false); // user_pref("security.ssl3.rsa_des_ede3_sha", false);
/* 1262: disable 128 bits ***/ /* 1262: disable 128 bits ***/
@ -765,10 +752,8 @@ user_pref("browser.ssl_override_behavior", 1);
* [TEST] https://expired.badssl.com/ ***/ * [TEST] https://expired.badssl.com/ ***/
user_pref("browser.xul.error_pages.expert_bad_cert", true); user_pref("browser.xul.error_pages.expert_bad_cert", true);
/* 1273: display "insecure" icon and "Not Secure" text on HTTP sites ***/ /* 1273: display "insecure" icon and "Not Secure" text on HTTP sites ***/
user_pref("security.insecure_connection_icon.enabled", true); // [FF59+] user_pref("security.insecure_connection_icon.enabled", true); // [FF59+] [DEFAULT: true FF70+]
user_pref("security.insecure_connection_text.enabled", true); // [FF60+] user_pref("security.insecure_connection_text.enabled", true); // [FF60+]
// user_pref("security.insecure_connection_icon.pbmode.enabled", true); // [FF59+] private windows only
// user_pref("security.insecure_connection_text.pbmode.enabled", true); // [FF60+] private windows only
/*** [SECTION 1400]: FONTS ***/ /*** [SECTION 1400]: FONTS ***/
user_pref("_user.js.parrot", "1400 syntax error: the parrot's bereft of life!"); user_pref("_user.js.parrot", "1400 syntax error: the parrot's bereft of life!");
@ -785,8 +770,6 @@ user_pref("browser.display.use_document_fonts", 0);
/* 1404: disable rendering of SVG OpenType fonts /* 1404: disable rendering of SVG OpenType fonts
* [1] https://wiki.mozilla.org/SVGOpenTypeFonts - iSECPartnersReport recommends to disable this ***/ * [1] https://wiki.mozilla.org/SVGOpenTypeFonts - iSECPartnersReport recommends to disable this ***/
user_pref("gfx.font_rendering.opentype_svg.enabled", false); user_pref("gfx.font_rendering.opentype_svg.enabled", false);
/* 1405: disable WOFF2 (Web Open Font Format) [FF35+] ***/
// user_pref("gfx.downloadable_fonts.woff2.enabled", false);
/* 1408: disable graphite which FF49 turned back on by default /* 1408: disable graphite which FF49 turned back on by default
* In the past it had security issues. Update: This continues to be the case, see [1] * In the past it had security issues. Update: This continues to be the case, see [1]
* [1] https://www.mozilla.org/security/advisories/mfsa2017-15/#CVE-2017-7778 ***/ * [1] https://www.mozilla.org/security/advisories/mfsa2017-15/#CVE-2017-7778 ***/
@ -823,7 +806,7 @@ user_pref("_user.js.parrot", "1600 syntax error: the parrot rests in peace!");
// user_pref("network.http.referer.trimmingPolicy", 0); // [DEFAULT: 0] // user_pref("network.http.referer.trimmingPolicy", 0); // [DEFAULT: 0]
/* 1603: CROSS ORIGIN: control when to send a referer /* 1603: CROSS ORIGIN: control when to send a referer
* 0=always (default), 1=only if base domains match, 2=only if hosts match * 0=always (default), 1=only if base domains match, 2=only if hosts match
* [SETUP-WEB] Known to cause issues with older modems/routers and some sites e.g vimeo ***/ * [SETUP-WEB] Known to cause issues with older modems/routers and some sites e.g vimeo, icloud ***/
user_pref("network.http.referer.XOriginPolicy", 1); user_pref("network.http.referer.XOriginPolicy", 1);
/* 1604: CROSS ORIGIN: control the amount of information to send [FF52+] /* 1604: CROSS ORIGIN: control the amount of information to send [FF52+]
* 0=send full URI (default), 1=scheme+host+port+path, 2=scheme+host+port ***/ * 0=send full URI (default), 1=scheme+host+port+path, 2=scheme+host+port ***/
@ -865,8 +848,6 @@ user_pref("privacy.userContext.ui.enabled", true);
/* 1702: enable Container Tabs [FF50+] /* 1702: enable Container Tabs [FF50+]
* [SETTING] General>Tabs>Enable Container Tabs ***/ * [SETTING] General>Tabs>Enable Container Tabs ***/
user_pref("privacy.userContext.enabled", true); user_pref("privacy.userContext.enabled", true);
/* 1703: enable a private container for thumbnail loads [FF51+] ***/
user_pref("privacy.usercontext.about_newtab_segregation.enabled", true); // [DEFAULT: true in FF61+]
/* 1704: set behaviour on "+ Tab" button to display container menu [FF53+] [SETUP-CHROME] /* 1704: set behaviour on "+ Tab" button to display container menu [FF53+] [SETUP-CHROME]
* 0=no menu (default), 1=show when clicked, 2=show on long press * 0=no menu (default), 1=show when clicked, 2=show on long press
* [1] https://bugzilla.mozilla.org/1328756 ***/ * [1] https://bugzilla.mozilla.org/1328756 ***/
@ -874,9 +855,6 @@ user_pref("privacy.userContext.longPressBehavior", 2);
/*** [SECTION 1800]: PLUGINS ***/ /*** [SECTION 1800]: PLUGINS ***/
user_pref("_user.js.parrot", "1800 syntax error: the parrot's pushing up daisies!"); user_pref("_user.js.parrot", "1800 syntax error: the parrot's pushing up daisies!");
/* 1802: enable click to play and set to 0 minutes ***/
user_pref("plugins.click_to_play", true);
user_pref("plugin.sessionPermissionNow.intervalInMinutes", 0);
/* 1803: disable Flash plugin /* 1803: disable Flash plugin
* 0=deactivated, 1=ask, 2=enabled * 0=deactivated, 1=ask, 2=enabled
* ESR52.x is the last branch to *fully* support NPAPI, FF52+ stable only supports Flash * ESR52.x is the last branch to *fully* support NPAPI, FF52+ stable only supports Flash
@ -904,18 +882,20 @@ user_pref("_user.js.parrot", "2000 syntax error: the parrot's snuffed it!");
* [1] https://www.privacytools.io/#webrtc ***/ * [1] https://www.privacytools.io/#webrtc ***/
user_pref("media.peerconnection.enabled", false); user_pref("media.peerconnection.enabled", false);
/* 2002: limit WebRTC IP leaks if using WebRTC /* 2002: limit WebRTC IP leaks if using WebRTC
* In FF70+ these settings match Mode 4 (Mode 3 in older versions) (see [3])
* [TEST] https://browserleaks.com/webrtc * [TEST] https://browserleaks.com/webrtc
* [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1189041,1297416 * [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1189041,1297416,1452713
* [2] https://wiki.mozilla.org/Media/WebRTC/Privacy ***/ * [2] https://wiki.mozilla.org/Media/WebRTC/Privacy
* [3] https://tools.ietf.org/html/draft-ietf-rtcweb-ip-handling-12#section-5.2 ***/
user_pref("media.peerconnection.ice.default_address_only", true); user_pref("media.peerconnection.ice.default_address_only", true);
user_pref("media.peerconnection.ice.no_host", true); // [FF51+] user_pref("media.peerconnection.ice.no_host", true); // [FF51+]
user_pref("media.peerconnection.ice.proxy_only_if_behind_proxy", true); // [FF70+]
/* 2010: disable WebGL (Web Graphics Library) /* 2010: disable WebGL (Web Graphics Library)
* [SETUP-WEB] When disabled, may break some websites. When enabled, provides high entropy, * [SETUP-WEB] When disabled, may break some websites. When enabled, provides high entropy,
* especially with readPixels(). Some of the other entropy is lessened with RFP (see 4501) * especially with readPixels(). Some of the other entropy is lessened with RFP (see 4501)
* [1] https://www.contextis.com/resources/blog/webgl-new-dimension-browser-exploitation/ * [1] https://www.contextis.com/resources/blog/webgl-new-dimension-browser-exploitation/
* [2] https://security.stackexchange.com/questions/13799/is-webgl-a-security-concern ***/ * [2] https://security.stackexchange.com/questions/13799/is-webgl-a-security-concern ***/
user_pref("webgl.disabled", true); user_pref("webgl.disabled", true);
user_pref("webgl.dxgl.enabled", false); // [WINDOWS]
user_pref("webgl.enable-webgl2", false); user_pref("webgl.enable-webgl2", false);
/* 2012: limit WebGL ***/ /* 2012: limit WebGL ***/
user_pref("webgl.min_capability_mode", true); user_pref("webgl.min_capability_mode", true);
@ -932,22 +912,19 @@ user_pref("media.getusermedia.audiocapture.enabled", false);
// user_pref("permissions.default.camera", 2); // user_pref("permissions.default.camera", 2);
// user_pref("permissions.default.microphone", 2); // user_pref("permissions.default.microphone", 2);
/* 2030: disable autoplay of HTML5 media [FF63+] /* 2030: disable autoplay of HTML5 media [FF63+]
* 0=Allowed, 1=Blocked (2=Prompt - removed in FF66) * 0=Allow all, 1=Block non-muted media (default in FF67+), 2=Prompt (removed in FF66), 5=Block all (FF69+)
* [NOTE] You can set exceptions under site permissions * [NOTE] You can set exceptions under site permissions
* [SETTING] Privacy & Security>Permissions>Block websites from automatically playing sound ***/ * [SETTING] Privacy & Security>Permissions>Autoplay>Settings>Default for all websites ***/
user_pref("media.autoplay.default", 1); // [DEFAULT: 1 in FF67+] // user_pref("media.autoplay.default", 5);
/* 2031: disable autoplay of HTML5 media if you interacted with the site [FF66+] ***/ /* 2031: disable autoplay of HTML5 media if you interacted with the site [FF66+] ***/
user_pref("media.autoplay.enabled.user-gestures-needed", false); user_pref("media.autoplay.enabled.user-gestures-needed", false);
/* 2032: disable audio autoplay in non-active tabs [FF51+] /* 2032: disable autoplay of HTML5 media in non-active tabs [FF51+]
* [1] https://www.ghacks.net/2016/11/14/firefox-51-blocks-automatic-audio-playback-in-non-active-tabs/ ***/ * [1] https://www.ghacks.net/2016/11/14/firefox-51-blocks-automatic-audio-playback-in-non-active-tabs/ ***/
user_pref("media.block-autoplay-until-in-foreground", true); // [DEFAULT: true] user_pref("media.block-autoplay-until-in-foreground", true); // [DEFAULT: true]
/* 2033: disable autoplay for muted videos [FF63+] ***/
// user_pref("media.autoplay.allow-muted", false);
/*** [SECTION 2200]: WINDOW MEDDLING & LEAKS / POPUPS ***/ /*** [SECTION 2200]: WINDOW MEDDLING & LEAKS / POPUPS ***/
user_pref("_user.js.parrot", "2200 syntax error: the parrot's 'istory!"); user_pref("_user.js.parrot", "2200 syntax error: the parrot's 'istory!");
/* 2201: prevent websites from disabling new window features /* 2201: prevent websites from disabling new window features ***/
* [1] http://kb.mozillazine.org/Prevent_websites_from_disabling_new_window_features ***/
user_pref("dom.disable_window_open_feature.close", true); user_pref("dom.disable_window_open_feature.close", true);
user_pref("dom.disable_window_open_feature.location", true); // [DEFAULT: true] user_pref("dom.disable_window_open_feature.location", true); // [DEFAULT: true]
user_pref("dom.disable_window_open_feature.menubar", true); user_pref("dom.disable_window_open_feature.menubar", true);
@ -975,8 +952,7 @@ user_pref("browser.link.open_newwindow.restriction", 0);
* [SETTING] Privacy & Security>Permissions>Block pop-up windows ***/ * [SETTING] Privacy & Security>Permissions>Block pop-up windows ***/
user_pref("dom.disable_open_during_load", true); user_pref("dom.disable_open_during_load", true);
/* 2212: limit events that can cause a popup [SETUP-WEB] /* 2212: limit events that can cause a popup [SETUP-WEB]
* default is "change click dblclick auxclick mouseup pointerup notificationclick reset submit touchend contextmenu" * default is "change click dblclick auxclick mouseup pointerup notificationclick reset submit touchend contextmenu" ***/
* [1] http://kb.mozillazine.org/Dom.popup_allowed_events ***/
user_pref("dom.popup_allowed_events", "click dblclick"); user_pref("dom.popup_allowed_events", "click dblclick");
/*** [SECTION 2300]: WEB WORKERS /*** [SECTION 2300]: WEB WORKERS
@ -997,30 +973,32 @@ user_pref("dom.popup_allowed_events", "click dblclick");
***/ ***/
user_pref("_user.js.parrot", "2300 syntax error: the parrot's off the twig!"); user_pref("_user.js.parrot", "2300 syntax error: the parrot's off the twig!");
/* 2302: disable service workers [FF32, FF44-compat] /* 2302: disable service workers [FF32, FF44-compat]
* Service workers essentially act as proxy servers that sit between web apps, and the browser * Service workers essentially act as proxy servers that sit between web apps, and the
* and network, are event driven, and can control the web page/site it is associated with, * browser and network, are event driven, and can control the web page/site it is associated
* intercepting and modifying navigation and resource requests, and caching resources. * with, intercepting and modifying navigation and resource requests, and caching resources.
* [NOTE] Service worker APIs are hidden (in Firefox) and cannot be used when in PB mode. * [NOTE] Service worker APIs are hidden (in Firefox) and cannot be used when in PB mode.
* [NOTE] Service workers only run over HTTPS. Service workers have no DOM access. * [NOTE] Service workers only run over HTTPS. Service workers have no DOM access.
* [SETUP-WEB] Disabling service workers will break some sites. This pref is a master switch, and controls * [SETUP-WEB] Disabling service workers will break some sites. This pref is required true for
* notifications (2304, 2305) and service worker cache (2740) - all three are inactive. Notifications are * service worker notifications (2304), push notifications (disabled, 2305) and service worker
* behind a prompt (2306). If you enable service workers, then you may want to look at those as well ***/ * cache (2740). If you enable this pref, then check those settings as well ***/
user_pref("dom.serviceWorkers.enabled", false); user_pref("dom.serviceWorkers.enabled", false);
/* 2304: disable Web Notifications /* 2304: disable Web Notifications
* [NOTE] Web Notifications require service workers (2302) and are behind a prompt (2306) * [NOTE] Web Notifications can also use service workers (2302) and are behind a prompt (2306)
* [1] https://developer.mozilla.org/docs/Web/API/Notifications_API ***/ * [1] https://developer.mozilla.org/docs/Web/API/Notifications_API ***/
// user_pref("dom.webnotifications.enabled", false); // [FF22+] // user_pref("dom.webnotifications.enabled", false); // [FF22+]
// user_pref("dom.webnotifications.serviceworker.enabled", false); // [FF44+] // user_pref("dom.webnotifications.serviceworker.enabled", false); // [FF44+]
/* 2305: disable Push Notifications [FF44+] /* 2305: disable Push Notifications [FF44+]
* web apps can receive messages pushed to them from a server, whether or * Push is an API that allows websites to send you (subscribed) messages even when the site
* not the web app is in the foreground, or even currently loaded * isn't loaded, by pushing messages to your userAgentID through Mozilla's Push Server.
* [NOTE] Push Notifications require service workers (2302) and are behind a prompt (2306) * [NOTE] Push requires service workers (2302) to subscribe to and display, and is behind
* [1] https://developer.mozilla.org/docs/Web/API/Push_API ***/ * a prompt (2306). Disabling service workers alone doesn't stop Firefox polling the
// user_pref("dom.push.enabled", false); * Mozilla Push Server. To remove all subscriptions, reset your userAgentID (in about:config
// user_pref("dom.push.connection.enabled", false); * or on start), and you will get a new one within a few seconds.
// user_pref("dom.push.serverURL", ""); * [1] https://support.mozilla.org/en-US/kb/push-notifications-firefox
* [2] https://developer.mozilla.org/en-US/docs/Web/API/Push_API ***/
user_pref("dom.push.enabled", false);
// user_pref("dom.push.userAgentID", ""); // user_pref("dom.push.userAgentID", "");
/* 2306: set a default permission for Notifications (both 2305 and 2306) [FF58+] /* 2306: set a default permission for Notifications (both 2304 and 2305) [FF58+]
* 0=always ask (default), 1=allow, 2=block * 0=always ask (default), 1=allow, 2=block
* [NOTE] Best left at default "always ask", fingerprintable via Permissions API * [NOTE] Best left at default "always ask", fingerprintable via Permissions API
* [SETTING] to add site exceptions: Page Info>Permissions>Receive Notifications * [SETTING] to add site exceptions: Page Info>Permissions>Receive Notifications
@ -1067,6 +1045,7 @@ user_pref("javascript.options.asmjs", false);
// user_pref("javascript.options.ion", false); // user_pref("javascript.options.ion", false);
// user_pref("javascript.options.baselinejit", false); // user_pref("javascript.options.baselinejit", false);
/* 2422: disable WebAssembly [FF52+] [SETUP-PERF] /* 2422: disable WebAssembly [FF52+] [SETUP-PERF]
* [NOTE] In FF71+ this no longer affects extensions (1576254)
* [1] https://developer.mozilla.org/docs/WebAssembly ***/ * [1] https://developer.mozilla.org/docs/WebAssembly ***/
user_pref("javascript.options.wasm", false); user_pref("javascript.options.wasm", false);
/* 2426: disable Intersection Observer API [FF55+] /* 2426: disable Intersection Observer API [FF55+]
@ -1141,19 +1120,19 @@ user_pref("devtools.chrome.enabled", false);
/* 2608: disable WebIDE to prevent remote debugging and ADB extension download /* 2608: disable WebIDE to prevent remote debugging and ADB extension download
* [1] https://trac.torproject.org/projects/tor/ticket/16222 ***/ * [1] https://trac.torproject.org/projects/tor/ticket/16222 ***/
user_pref("devtools.debugger.remote-enabled", false); user_pref("devtools.debugger.remote-enabled", false);
user_pref("devtools.webide.enabled", false); user_pref("devtools.webide.enabled", false); // [DEFAULT: false FF70+]
user_pref("devtools.webide.autoinstallADBExtension", false); // [FF64+] user_pref("devtools.webide.autoinstallADBExtension", false); // [FF64+]
/* 2609: disable MathML (Mathematical Markup Language) [FF51+] [SETUP-HARDEN] /* 2609: disable MathML (Mathematical Markup Language) [FF51+] [SETUP-HARDEN]
* [TEST] https://ghacksuserjs.github.io/TorZillaPrint/TorZillaPrint.html#misc * [TEST] https://ghacksuserjs.github.io/TorZillaPrint/TorZillaPrint.html#misc
* [1] https://bugzilla.mozilla.org/1173199 ***/ * [1] https://bugzilla.mozilla.org/1173199 ***/
// user_pref("mathml.disabled", true); // user_pref("mathml.disabled", true);
/* 2610: disable in-content SVG (Scalable Vector Graphics) [FF53+] /* 2610: disable in-content SVG (Scalable Vector Graphics) [FF53+]
* [NOTE] In FF70+ and ESR68.1.0+ this no longer affects extensions (1564208)
* [WARNING] Expect breakage incl. youtube player controls. Best left for a "hardened" profile. * [WARNING] Expect breakage incl. youtube player controls. Best left for a "hardened" profile.
* [1] https://bugzilla.mozilla.org/1216893 ***/ * [1] https://bugzilla.mozilla.org/1216893 ***/
// user_pref("svg.disabled", true); // user_pref("svg.disabled", true);
/* 2611: disable middle mouse click opening links from clipboard /* 2611: disable middle mouse click opening links from clipboard
* [1] https://trac.torproject.org/projects/tor/ticket/10089 * [1] https://trac.torproject.org/projects/tor/ticket/10089 ***/
* [2] http://kb.mozillazine.org/Middlemouse.contentLoadURL ***/
user_pref("middlemouse.contentLoadURL", false); user_pref("middlemouse.contentLoadURL", false);
/* 2614: limit HTTP redirects (this does not control redirects with HTML meta tags or JS) /* 2614: limit HTTP redirects (this does not control redirects with HTML meta tags or JS)
* [NOTE] A low setting of 5 or under will probably break some sites (e.g. gmail logins) * [NOTE] A low setting of 5 or under will probably break some sites (e.g. gmail logins)
@ -1177,7 +1156,7 @@ user_pref("webchannel.allowObject.urlWhitelist", "");
* [3] CVE-2017-5383: https://www.mozilla.org/security/advisories/mfsa2017-02/ * [3] CVE-2017-5383: https://www.mozilla.org/security/advisories/mfsa2017-02/
* [4] https://www.xudongz.com/blog/2017/idn-phishing/ ***/ * [4] https://www.xudongz.com/blog/2017/idn-phishing/ ***/
user_pref("network.IDN_show_punycode", true); user_pref("network.IDN_show_punycode", true);
/* 2620: enable Firefox's built-in PDF reader [SETUP-CHROME] /* 2620: enforce Firefox's built-in PDF reader [SETUP-CHROME]
* This setting controls if the option "Display in Firefox" is available in the setting below * This setting controls if the option "Display in Firefox" is available in the setting below
* and by effect controls whether PDFs are handled in-browser or externally ("Ask" or "Open With") * and by effect controls whether PDFs are handled in-browser or externally ("Ask" or "Open With")
* PROS: pdfjs is lightweight, open source, and as secure/vetted as any pdf reader out there (more than most) * PROS: pdfjs is lightweight, open source, and as secure/vetted as any pdf reader out there (more than most)
@ -1194,10 +1173,11 @@ user_pref("network.protocol-handler.external.ms-windows-store", false);
/** DOWNLOADS ***/ /** DOWNLOADS ***/
/* 2650: discourage downloading to desktop /* 2650: discourage downloading to desktop
* 0=desktop 1=downloads 2=last used * 0=desktop, 1=downloads (default), 2=last used
* [SETTING] To set your default "downloads": General>Downloads>Save files to ***/ * [SETTING] To set your default "downloads": General>Downloads>Save files to ***/
// user_pref("browser.download.folderList", 2); // user_pref("browser.download.folderList", 2);
/* 2651: enforce user interaction for security by always asking where to download [SETUP-CHROME] /* 2651: enforce user interaction for security by always asking where to download
* [SETUP-CHROME] On Android this blocks longtapping and saving images
* [SETTING] General>Downloads>Always ask you where to save files ***/ * [SETTING] General>Downloads>Always ask you where to save files ***/
user_pref("browser.download.useDownloadDir", false); user_pref("browser.download.useDownloadDir", false);
/* 2652: disable adding downloads to the system's "recent documents" list ***/ /* 2652: disable adding downloads to the system's "recent documents" list ***/
@ -1224,12 +1204,12 @@ user_pref("extensions.autoDisableScopes", 15); // [DEFAULT: 15]
// user_pref("extensions.webextensions.restrictedDomains", ""); // user_pref("extensions.webextensions.restrictedDomains", "");
/** SECURITY ***/ /** SECURITY ***/
/* 2680: enable CSP (Content Security Policy) /* 2680: enforce CSP (Content Security Policy)
* [WARNING] CSP is a very important and widespread security feature. Don't disable it!
* [1] https://developer.mozilla.org/docs/Web/HTTP/CSP ***/ * [1] https://developer.mozilla.org/docs/Web/HTTP/CSP ***/
user_pref("security.csp.enable", true); // [DEFAULT: true] user_pref("security.csp.enable", true); // [DEFAULT: true]
/* 2684: enforce a security delay on some confirmation dialogs such as install, open/save /* 2684: enforce a security delay on some confirmation dialogs such as install, open/save
* [1] http://kb.mozillazine.org/Disable_extension_install_delay_-_Firefox * [1] https://www.squarefree.com/2004/07/01/race-conditions-in-security-dialogs/ ***/
* [2] https://www.squarefree.com/2004/07/01/race-conditions-in-security-dialogs/ ***/
user_pref("security.dialog_enable_delay", 700); user_pref("security.dialog_enable_delay", 700);
/*** [SECTION 2700]: PERSISTENT STORAGE /*** [SECTION 2700]: PERSISTENT STORAGE
@ -1248,9 +1228,8 @@ user_pref("security.dialog_enable_delay", 700);
***/ ***/
user_pref("_user.js.parrot", "2700 syntax error: the parrot's joined the bleedin' choir invisible!"); user_pref("_user.js.parrot", "2700 syntax error: the parrot's joined the bleedin' choir invisible!");
/* 2701: disable 3rd-party cookies and site-data [SETUP-WEB] /* 2701: disable 3rd-party cookies and site-data [SETUP-WEB]
* 0=Accept cookies and site data (default), 1=(Block) All third-party cookies, 2=(Block) All cookies, * 0=Accept cookies and site data, 1=(Block) All third-party cookies, 2=(Block) All cookies,
* 3=(Block) Cookies from unvisited sites, 4=(Block) Third-party trackers (FF63+) * 3=(Block) Cookies from unvisited websites, 4=(Block) Cross-site and social media trackers (FF63+) (default FF69+)
* [NOTE] Value 4 is tied to the Tracking Protection lists
* [NOTE] You can set exceptions under site permissions or use an extension * [NOTE] You can set exceptions under site permissions or use an extension
* [SETTING] Privacy & Security>Content Blocking>Custom>Choose what to block>Cookies ***/ * [SETTING] Privacy & Security>Content Blocking>Custom>Choose what to block>Cookies ***/
user_pref("network.cookie.cookieBehavior", 1); user_pref("network.cookie.cookieBehavior", 1);
@ -1258,8 +1237,7 @@ user_pref("network.cookie.cookieBehavior", 1);
and (FF58+) set third-party non-secure (i.e HTTP) cookies to session-only and (FF58+) set third-party non-secure (i.e HTTP) cookies to session-only
[NOTE] .sessionOnly overrides .nonsecureSessionOnly except when .sessionOnly=false and [NOTE] .sessionOnly overrides .nonsecureSessionOnly except when .sessionOnly=false and
.nonsecureSessionOnly=true. This allows you to keep HTTPS cookies, but session-only HTTP ones .nonsecureSessionOnly=true. This allows you to keep HTTPS cookies, but session-only HTTP ones
* [1] https://feeding.cloud.geek.nz/posts/tweaking-cookies-for-privacy-in-firefox/ * [1] https://feeding.cloud.geek.nz/posts/tweaking-cookies-for-privacy-in-firefox/ ***/
* [2] http://kb.mozillazine.org/Network.cookie.thirdparty.sessionOnly ***/
user_pref("network.cookie.thirdparty.sessionOnly", true); user_pref("network.cookie.thirdparty.sessionOnly", true);
user_pref("network.cookie.thirdparty.nonsecureSessionOnly", true); // [FF58+] user_pref("network.cookie.thirdparty.nonsecureSessionOnly", true); // [FF58+]
/* 2703: delete cookies and site data on close /* 2703: delete cookies and site data on close
@ -1340,9 +1318,10 @@ user_pref("privacy.cpd.offlineApps", true); // Offline Website Data
user_pref("privacy.cpd.passwords", false); // this is not listed user_pref("privacy.cpd.passwords", false); // this is not listed
user_pref("privacy.cpd.sessions", true); // Active Logins user_pref("privacy.cpd.sessions", true); // Active Logins
user_pref("privacy.cpd.siteSettings", false); // Site Preferences user_pref("privacy.cpd.siteSettings", false); // Site Preferences
/* 2805: privacy.*.openWindows (clear session restore data) [FF34+] /* 2805: clear Session Restore data when sanitizing on shutdown or manually [FF34+]
* [NOTE] There is a years-old bug that these cause two windows when Firefox restarts. * [NOTE] Not needed if Session Restore is not used (see 0102) or is already cleared with history (see 2803)
* You do not need these anyway if session restore is cleared with history (see 2803) ***/ * [NOTE] privacy.clearOnShutdown.openWindows prevents resuming from crashes (see 1022)
* [NOTE] privacy.cpd.openWindows has a bug that causes an additional window to open ***/
// user_pref("privacy.clearOnShutdown.openWindows", true); // user_pref("privacy.clearOnShutdown.openWindows", true);
// user_pref("privacy.cpd.openWindows", true); // user_pref("privacy.cpd.openWindows", true);
/* 2806: reset default 'Time range to clear' for 'Clear Recent History' (see 2804) /* 2806: reset default 'Time range to clear' for 'Clear Recent History' (see 2804)
@ -1368,9 +1347,10 @@ user_pref("privacy.sanitize.timeSpan", 0);
** 1300671 - isolate data:, about: URLs (FF55+) ** 1300671 - isolate data:, about: URLs (FF55+)
** 1473247 - isolate IP addresses (FF63+) ** 1473247 - isolate IP addresses (FF63+)
** 1492607 - isolate postMessage with targetOrigin "*" (requires 4002) (FF65+) ** 1492607 - isolate postMessage with targetOrigin "*" (requires 4002) (FF65+)
** 1542309 - isolate top-level domain URLs (FF68+) ** 1542309 - isolate top-level domain URLs when host is in the public suffix list (FF68+)
** 1506693 - isolate pdfjs range-based requests (FF68+) ** 1506693 - isolate pdfjs range-based requests (FF68+)
** 1330467 - isolate site permissions (coming) ** 1330467 - isolate site permissions (FF69+)
** 1534339 - isolate IPv6 (coming soon)
***/ ***/
user_pref("_user.js.parrot", "4000 syntax error: the parrot's pegged out"); user_pref("_user.js.parrot", "4000 syntax error: the parrot's pegged out");
/* 4001: enable First Party Isolation [FF51+] /* 4001: enable First Party Isolation [FF51+]
@ -1386,7 +1366,7 @@ user_pref("privacy.firstparty.isolate", true);
* [2] https://bugzilla.mozilla.org/1492607 * [2] https://bugzilla.mozilla.org/1492607
* [3] https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage ***/ * [3] https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage ***/
user_pref("privacy.firstparty.isolate.restrict_opener_access", true); // [DEFAULT: true] user_pref("privacy.firstparty.isolate.restrict_opener_access", true); // [DEFAULT: true]
// user_pref("privacy.firstparty.isolate.block_post_message", true); // [HIDDEN PREF] // user_pref("privacy.firstparty.isolate.block_post_message", true); // [HIDDEN PREF ESR]
/*** [SECTION 4500]: RFP (RESIST FINGERPRINTING) /*** [SECTION 4500]: RFP (RESIST FINGERPRINTING)
This master switch will be used for a wide range of items, many of which will This master switch will be used for a wide range of items, many of which will
@ -1421,7 +1401,7 @@ user_pref("privacy.firstparty.isolate.restrict_opener_access", true); // [DEFAUL
** 1337161 - hide gamepads from content (see 4606) (FF56+) ** 1337161 - hide gamepads from content (see 4606) (FF56+)
** 1372072 - spoof network information API as "unknown" when dom.netinfo.enabled = true (see 4607) (FF56+) ** 1372072 - spoof network information API as "unknown" when dom.netinfo.enabled = true (see 4607) (FF56+)
** 1333641 - reduce fingerprinting in WebSpeech API (see 4608) (FF56+) ** 1333641 - reduce fingerprinting in WebSpeech API (see 4608) (FF56+)
** 1372069 & 1403813 & 1441295 - block geolocation requests (same as denying a site permission) (see 0201, 0201b) (FF56-62) ** 1372069 & 1403813 & 1441295 - block geolocation requests (same as denying a site permission) (see 0201, 0202) (FF56-62)
** 1369309 - spoof media statistics (see 4610) (FF57+) ** 1369309 - spoof media statistics (see 4610) (FF57+)
** 1382499 - reduce screen co-ordinate fingerprinting in Touch API (see 4611) (FF57+) ** 1382499 - reduce screen co-ordinate fingerprinting in Touch API (see 4611) (FF57+)
** 1217290 & 1409677 - enable fingerprinting resistance for WebGL (see 2010-12) (FF57+) ** 1217290 & 1409677 - enable fingerprinting resistance for WebGL (see 2010-12) (FF57+)
@ -1435,7 +1415,7 @@ user_pref("privacy.firstparty.isolate.restrict_opener_access", true); // [DEFAUL
Spoof: enumerate devices reports one "Internal Camera" and one "Internal Microphone" if Spoof: enumerate devices reports one "Internal Camera" and one "Internal Microphone" if
media.navigator.enabled is true (see 2505 which we chose to keep disabled) media.navigator.enabled is true (see 2505 which we chose to keep disabled)
Block: suppresses the ondevicechange event (see 4612) Block: suppresses the ondevicechange event (see 4612)
** 1039069 - warn when language prefs are set to non en-US (see 0207, 0208) (FF59+) ** 1039069 - warn when language prefs are set to non en-US (see 0210, 0211) (FF59+)
** 1222285 & 1433592 - spoof keyboard events and suppress keyboard modifier events (FF59+) ** 1222285 & 1433592 - spoof keyboard events and suppress keyboard modifier events (FF59+)
Spoofing mimics the content language of the document. Currently it only supports en-US. Spoofing mimics the content language of the document. Currently it only supports en-US.
Modifier events suppressed are SHIFT and both ALT keys. Chrome is not affected. Modifier events suppressed are SHIFT and both ALT keys. Chrome is not affected.
@ -1450,6 +1430,7 @@ user_pref("privacy.firstparty.isolate.restrict_opener_access", true); // [DEFAUL
** 1540726 - return "light" with prefers-color-scheme (FF67+) ** 1540726 - return "light" with prefers-color-scheme (FF67+)
[1] https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme [1] https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme
** 1564422 - spoof audioContext outputLatency (FF70+) ** 1564422 - spoof audioContext outputLatency (FF70+)
** 1595823 - spoof audioContext sampleRate (FF72+)
***/ ***/
user_pref("_user.js.parrot", "4500 syntax error: the parrot's popped 'is clogs"); user_pref("_user.js.parrot", "4500 syntax error: the parrot's popped 'is clogs");
/* 4501: enable privacy.resistFingerprinting [FF41+] /* 4501: enable privacy.resistFingerprinting [FF41+]
@ -1486,10 +1467,15 @@ user_pref("privacy.resistFingerprinting.letterboxing", true); // [HIDDEN PREF]
user_pref("browser.startup.blankWindow", false); user_pref("browser.startup.blankWindow", false);
/*** [SECTION 4600]: RFP ALTERNATIVES /*** [SECTION 4600]: RFP ALTERNATIVES
* IF you DO use RFP (see 4500) then you DO NOT need these redundant prefs. In fact, * non-RFP users:
some even cause RFP to not behave as you would expect and alter your fingerprint. Enable the whole section (see the SETUP tag below)
Make sure they are RESET in about:config as per your Firefox version * RFP users:
* IF you DO NOT use RFP or are on ESR... then turn on each ESR section below Make sure these are reset in about:config. They are redundant. In fact, some
even cause RFP to not behave as you would expect and alter your fingerprint
* ESR RFP users:
Reset those *up to and including* your version. Add those *after* your version
as active prefs in your overrides. This is assuming that the patch wasn't also
backported to Firefox ESR. Backporting RFP patches to ESR is rare.
***/ ***/
user_pref("_user.js.parrot", "4600 syntax error: the parrot's crossed the Jordan"); user_pref("_user.js.parrot", "4600 syntax error: the parrot's crossed the Jordan");
/* [SETUP-non-RFP] Non-RFP users replace the * with a slash on this line to enable these /* [SETUP-non-RFP] Non-RFP users replace the * with a slash on this line to enable these
@ -1633,15 +1619,18 @@ user_pref("_user.js.parrot", "5000 syntax error: this is an ex-parrot!");
// user_pref("general.autoScroll", false); // middle-click enabling auto-scrolling [WINDOWS] [MAC] // user_pref("general.autoScroll", false); // middle-click enabling auto-scrolling [WINDOWS] [MAC]
// user_pref("ui.key.menuAccessKey", 0); // disable alt key toggling the menu bar [RESTART] // user_pref("ui.key.menuAccessKey", 0); // disable alt key toggling the menu bar [RESTART]
// user_pref("view_source.tab", false); // view "page/selection source" in a new window [FF68+, FF59 and under] // user_pref("view_source.tab", false); // view "page/selection source" in a new window [FF68+, FF59 and under]
/* UX: FEATURES: disable and hide the icons and menus ***/
// user_pref("browser.messaging-system.whatsNewPanel.enabled", false); // What's New [FF69+]
// user_pref("extensions.pocket.enabled", false); // Pocket Account [FF46+]
// user_pref("identity.fxaccounts.enabled", false); // Firefox Accounts & Sync [FF60+] [RESTART]
// user_pref("reader.parse-on-load.enabled", false); // Reader View
/* OTHER ***/ /* OTHER ***/
// user_pref("browser.bookmarks.max_backups", 2); // user_pref("browser.bookmarks.max_backups", 2);
// user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false); // disable CFR [FF67+] // user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false); // disable CFR [FF67+]
// [SETTING] General>Browsing>Recommend extensions as you browse // [SETTING] General>Browsing>Recommend extensions as you browse
// user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false); // disable CFR [FF67+] // user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false); // disable CFR [FF67+]
// [SETTING] General>Browsing>Recommend features as you browse // [SETTING] General>Browsing>Recommend features as you browse
// user_pref("identity.fxaccounts.enabled", false); // disable and hide Firefox Accounts and Sync [FF60+] [RESTART]
// user_pref("network.manage-offline-status", false); // see bugzilla 620472 // user_pref("network.manage-offline-status", false); // see bugzilla 620472
// user_pref("reader.parse-on-load.enabled", false); // "Reader View"
// user_pref("xpinstall.signatures.required", false); // enforced extension signing (Nightly/ESR) // user_pref("xpinstall.signatures.required", false); // enforced extension signing (Nightly/ESR)
/*** [SECTION 9999]: DEPRECATED / REMOVED / LEGACY / RENAMED /*** [SECTION 9999]: DEPRECATED / REMOVED / LEGACY / RENAMED
@ -1650,9 +1639,7 @@ user_pref("_user.js.parrot", "5000 syntax error: this is an ex-parrot!");
[1] https://github.com/ghacksuserjs/ghacks-user.js/issues/123 [1] https://github.com/ghacksuserjs/ghacks-user.js/issues/123
***/ ***/
user_pref("_user.js.parrot", "9999 syntax error: the parrot's deprecated!"); user_pref("_user.js.parrot", "9999 syntax error: the parrot's deprecated!");
/* ESR60.x still uses all the following prefs /* FF61
// [NOTE] replace the * with a slash in the line above to re-enable them
// FF61
// 0501: disable experiments // 0501: disable experiments
// [1] https://wiki.mozilla.org/Telemetry/Experiments // [1] https://wiki.mozilla.org/Telemetry/Experiments
// [-] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1420908,1450801 // [-] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1420908,1450801
@ -1669,13 +1656,13 @@ user_pref("network.jar.block-remote-files", true);
// [-] https://bugzilla.mozilla.org/1427726 // [-] https://bugzilla.mozilla.org/1427726
user_pref("network.jar.open-unsafe-types", false); user_pref("network.jar.open-unsafe-types", false);
// ***/ // ***/
// FF62 /* FF62
// 1803: disable Java plugin // 1803: disable Java plugin
// [-] (part5) https://bugzilla.mozilla.org/1461243 // [-] (part5) https://bugzilla.mozilla.org/1461243
user_pref("plugin.state.java", 0); user_pref("plugin.state.java", 0);
// ***/ // ***/
// FF63 /* FF63
// 0202: disable GeoIP-based search results // 0205: disable GeoIP-based search results
// [NOTE] May not be hidden if Firefox has changed your settings due to your locale // [NOTE] May not be hidden if Firefox has changed your settings due to your locale
// [-] https://bugzilla.mozilla.org/1462015 // [-] https://bugzilla.mozilla.org/1462015
user_pref("browser.search.countryCode", "US"); // [HIDDEN PREF] user_pref("browser.search.countryCode", "US"); // [HIDDEN PREF]
@ -1700,7 +1687,7 @@ user_pref("media.autoplay.enabled", false);
// [-] https://bugzilla.mozilla.org/1473595 // [-] https://bugzilla.mozilla.org/1473595
// user_pref("browser.ctrlTab.previews", true); // user_pref("browser.ctrlTab.previews", true);
// ***/ // ***/
// FF64 /* FF64
// 0516: disable Onboarding [FF55+] // 0516: disable Onboarding [FF55+]
// Onboarding is an interactive tour/setup for new installs/profiles and features. Every time // Onboarding is an interactive tour/setup for new installs/profiles and features. Every time
// about:home or about:newtab is opened, the onboarding overlay is injected into that page // about:home or about:newtab is opened, the onboarding overlay is injected into that page
@ -1720,7 +1707,7 @@ user_pref("devtools.webide.adbAddonURL", "");
// [-] https://bugzilla.mozilla.org/1488165 // [-] https://bugzilla.mozilla.org/1488165
user_pref("security.csp.enable_violation_events", false); user_pref("security.csp.enable_violation_events", false);
// ***/ // ***/
// FF65 /* FF65
// 0850a: disable location bar autocomplete and suggestion types // 0850a: disable location bar autocomplete and suggestion types
// If you enforce any of the suggestion types (see the other 0850a), you MUST enforce 'autocomplete' // If you enforce any of the suggestion types (see the other 0850a), you MUST enforce 'autocomplete'
// - If *ALL* of the suggestion types are false, 'autocomplete' must also be false // - If *ALL* of the suggestion types are false, 'autocomplete' must also be false
@ -1732,7 +1719,7 @@ user_pref("browser.urlbar.autocomplete.enabled", false);
// [-] https://bugzilla.mozilla.org/1510580 // [-] https://bugzilla.mozilla.org/1510580
user_pref("browser.fixup.hide_user_pass", true); // [DEFAULT: true] user_pref("browser.fixup.hide_user_pass", true); // [DEFAULT: true]
// ***/ // ***/
// FF66 /* FF66
// 0380: disable Browser Error Reporter [FF60+] // 0380: disable Browser Error Reporter [FF60+]
// [1] https://support.mozilla.org/en-US/kb/firefox-nightly-error-collection // [1] https://support.mozilla.org/en-US/kb/firefox-nightly-error-collection
// [2] https://firefox-source-docs.mozilla.org/browser/browser/BrowserErrorReporter.html // [2] https://firefox-source-docs.mozilla.org/browser/browser/BrowserErrorReporter.html
@ -1743,7 +1730,7 @@ user_pref("browser.chrome.errorReporter.submitUrl", "");
// [-] https://bugzilla.mozilla.org/1415625 // [-] https://bugzilla.mozilla.org/1415625
user_pref("network.allow-experiments", false); user_pref("network.allow-experiments", false);
// ***/ // ***/
// FF67 /* FF67
// 2428: enforce DOMHighResTimeStamp API // 2428: enforce DOMHighResTimeStamp API
// [WARNING] Required for normalization of timestamps and any timer resolution mitigations // [WARNING] Required for normalization of timestamps and any timer resolution mitigations
// [-] https://bugzilla.mozilla.org/1485264 // [-] https://bugzilla.mozilla.org/1485264
@ -1754,11 +1741,11 @@ user_pref("dom.event.highrestimestamp.enabled", true); // [DEFAULT: true]
// [-] https://bugzilla.mozilla.org/1528953 // [-] https://bugzilla.mozilla.org/1528953
// user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr", false); // user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr", false);
// ***/ // ***/
// FF68 /* FF68
// 0105b: disable Activity Stream Snippets // 0105b: disable Activity Stream Legacy Snippets
// [-] https://bugzilla.mozilla.org/1540939 // [-] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1546190,1540939
user_pref("browser.aboutHomeSnippets.updateUrl", "");
user_pref("browser.newtabpage.activity-stream.disableSnippets", true); user_pref("browser.newtabpage.activity-stream.disableSnippets", true);
user_pref("browser.aboutHomeSnippets.updateUrl", "");
// 0307: disable auto updating of lightweight themes (LWT) // 0307: disable auto updating of lightweight themes (LWT)
// Not to be confused with themes in 0301* + 0302*, which use the FF55+ Theme API // Not to be confused with themes in 0301* + 0302*, which use the FF55+ Theme API
// Mozilla plan to convert existing LWTs and remove LWT support in the future, see [1] // Mozilla plan to convert existing LWTs and remove LWT support in the future, see [1]
@ -1770,6 +1757,20 @@ user_pref("lightweightThemes.update.enabled", false);
// [-] https://bugzilla.mozilla.org/1386214 // [-] https://bugzilla.mozilla.org/1386214
user_pref("security.csp.experimentalEnabled", true); user_pref("security.csp.experimentalEnabled", true);
// ***/ // ***/
/* ESR68.x still uses all the following prefs
// [NOTE] replace the * with a slash in the line above to re-enable them
// FF69
// 1405: disable WOFF2 (Web Open Font Format) [FF35+]
// [-] https://bugzilla.mozilla.org/1556991
// user_pref("gfx.downloadable_fonts.woff2.enabled", false);
// 1802: enforce click-to-play for plugins
// [-] https://bugzilla.mozilla.org/1519434
user_pref("plugins.click_to_play", true); // [DEFAULT: true FF25+]
// 2033: disable autoplay for muted videos [FF63+] - replaced by 'media.autoplay.default' options (2030)
// [-] https://bugzilla.mozilla.org/1562331
// user_pref("media.autoplay.allow-muted", false);
// * * * /
// ***/ // ***/
/* END: internal custom pref to test for syntax errors ***/ /* END: internal custom pref to test for syntax errors ***/