Compare commits

...

63 Commits

Author SHA1 Message Date
5fd7f6de7e 80-alpha 2020-08-28 18:27:20 +00:00
592b959c24 Updater.sh rework 2 (#1000)
* rework DOWNLOAD_METHOD, download_file, open_file

* remove legacy command leftover line

* return empty string if download fails and return/exit if this happens and show error message

* fix IFS var typo

* bump version

* add quotes

Co-authored-by: TotallyLeGIT <bbkqx24kxlgvgbss@mailban.de>
2020-08-28 10:51:15 +00:00
c6f53c8768 2201 deprecated (dead prefs removed in 82), #979 (#1002) 2020-08-26 11:28:47 +00:00
38d772e4c8 https-only mode updates (#1001) 2020-08-25 14:59:41 +00:00
cfce521919 1409: RFP changes in FF81+ (#998) 2020-08-23 14:37:18 +00:00
a5ab3e23d6 Update README.md 2020-08-22 22:16:27 +00:00
b3eee6c9fd improve readability, remove lots of unnecessary echo commands, remove legacy arguments (#997)
Co-authored-by: TotallyLeGIT <bbkqx24kxlgvgbss@mailban.de>
2020-08-22 12:07:13 +00:00
8d6d17d46b 1244: HTTPS-only mode: FF80+ site exceptions
The option is not shown if https-only-mode is not being applied. I tested with `http://asmjs.org/` since it doesn't redirect/upgrade to secure.
2020-08-21 21:05:08 +00:00
9a37e1340c 0905: add reference, #982 2020-08-20 17:18:22 +00:00
f1e0203ef4 0105b, cleaner value, see #992 2020-08-15 01:56:01 +00:00
726d5bde30 0105b: stop console error, closes #992 2020-08-14 14:12:28 +00:00
f9f0fffd27 Update README.md 2020-08-14 09:01:14 +00:00
93840ca181 0602 not hidden in ESR78 2020-08-13 15:37:25 +00:00
99aa5af356 password master->primary 2020-08-13 15:34:26 +00:00
0358fdac8b 80-alpha 2020-08-13 15:32:45 +00:00
815c3026b5 79 final 2020-08-13 15:30:36 +00:00
5ed3047b7a references cleanup 2020-08-13 15:22:38 +00:00
e16ede1cdf 79-beta 2020-08-13 14:44:27 +00:00
6905187b3e 0207/0208: region/search (#989) 2020-08-13 04:39:38 +00:00
172118e61b RFP+Alts: fixup sequential numbering, see #987 2020-08-05 01:35:10 +00:00
8452edb94b 4600: see #987 2020-08-04 10:25:29 +00:00
0f6957bbd4 4600: add missing version section 2020-08-04 10:18:29 +00:00
8c2bcc0352 1007: bump to 64mb, see #941 2020-08-03 22:50:58 +00:00
bc832575d8 1003: kibibytes 2020-08-03 14:52:21 +00:00
c4b7e07691 4500: site partitioning 2020-08-02 01:47:48 +00:00
58fb1db838 HTTPS-Only Mode UI 2020-08-02 01:27:30 +00:00
2809854802 font visibility / RFP (#985) 2020-08-01 11:03:17 +00:00
091a71aade browser.urlbar.usepreloadedtopurls.enabled 2020-07-29 02:22:09 +00:00
117ab133b1 remove 0809
not deprecated, just hidden: default is false anyway
2020-07-29 02:19:20 +00:00
c4a06c4689 missing comma 2020-07-23 12:23:14 +00:00
0d27689c64 update to ESR78
and this time add the file extension
2020-07-23 12:22:20 +00:00
771e57480a Delete ghacks-clear-RFP-alternatives 2020-07-23 12:21:10 +00:00
f8fd03482d 79 deprecated 2020-07-23 11:19:49 +00:00
10cc1224d0 Create ghacks-clear-removed.js 2020-07-23 11:00:23 +00:00
52926cca7a Delete ghacks-clear-[removed].js 2020-07-23 10:59:19 +00:00
be64819ce7 update to ESR78 2020-07-23 10:58:22 +00:00
24c228df92 update to ESR78 2020-07-23 10:57:12 +00:00
892b3d9d69 Delete ghacks-clear-FF68inclusive-[deprecated].js 2020-07-23 10:53:38 +00:00
df21798b81 Delete ghacks-clear-FF68inclusive-[RFP-alternatives].js 2020-07-23 10:53:25 +00:00
46d03279d3 79 start, fixup 2429 default info 2020-07-22 12:35:13 +00:00
fe0af3bb34 remove 0709 duplicate, 78 final 2020-07-21 10:40:01 +00:00
84997386c1 78-beta 2020-07-20 05:24:18 +00:00
1a389c0214 dnsResolveSingleWordsAfterSearch (#968) 2020-07-10 10:09:13 +00:00
d0060fed3c 2031: use exceptions if you need to, #969 2020-07-08 13:18:38 +00:00
3d18af19e3 various, #959 (#967)
Co-authored-by: rusty-snake
2020-07-05 14:02:25 +00:00
b5b04454e0 0850a search keywords fixup 2020-07-01 03:46:52 +00:00
618f7bed3f 0850a: add top sites FF78+ 2020-06-29 15:49:11 +00:00
488a825626 update weak ciphers/tests etc, closes #931 (#963)
- adds the new tests including the non-JS JA3

Co-authored-by: rusty-snake <41237666+rusty-snake@users.noreply.github.com>
Co-authored-by: earthlng <earthlng@users.noreply.github.com>
2020-06-28 15:48:13 +00:00
aaf6cb33d7 4617 restart
- at least for disabling chrome animations
2020-06-27 12:37:32 +00:00
77ecef8be3 78 deprecated, add 2032 (#962) 2020-06-27 12:16:57 +00:00
4be0a80720 update trac tor tickets (#958)
and some other minor tweaks
2020-06-24 17:26:25 +00:00
f573200aa8 ciphers in ESR78
[1496639](https://bugzilla.mozilla.org/show_bug.cgi?id=1496639)
2020-06-18 02:29:54 +00:00
48f258ff53 start 78-alpha 2020-06-14 10:28:32 +00:00
b9100488cb 77 final 2020-06-14 10:26:10 +00:00
9d78e050ee 77-beta 2020-06-12 17:39:28 +00:00
b07cf1f03d remove extra line from last commit, save one byte 2020-06-05 03:10:09 +00:00
683ef63b37 RFP alts: prefers-reduced-motion 2020-06-05 03:08:16 +00:00
05580f5e99 0709 hotfix, #923, #951 2020-06-02 20:48:41 +00:00
ecc62554e5 2608: remote debugging: default value, closes #950 2020-06-01 15:27:38 +00:00
f6e6de8444 77 deprecated 2020-05-29 12:41:59 +00:00
f69d92e6dd 1244: https upgrade local 2020-05-29 12:23:17 +00:00
3edc48da56 fix updater.sh when dealing with multiple overrides (#947)
thanks @mloberg !
2020-05-26 11:54:55 +00:00
868882ae33 start 77-alpha 2020-05-24 18:11:55 +00:00
6 changed files with 286 additions and 221 deletions

View File

@ -1,10 +1,10 @@
### ![][b] user.js ### ![][b] user.js
A `user.js` is a configuration file that can control hundreds of Firefox settings. For a more technical breakdown and explanation, you can read more on the [overview](https://github.com/ghacksuserjs/ghacks-user.js/wiki/1.1-Overview) wiki page. A `user.js` is a configuration file that can control hundreds of Firefox settings. For a more technical breakdown and explanation, you can read more on the [overview](https://github.com/ghacksuserjs/ghacks-user.js/wiki/1.1-Overview) wiki page.
### ![][b] ghacks user.js ### ![][b] This user.js
The `ghacks user.js` is a **template** which aims to provide as much privacy and enhanced security as possible, and to reduce tracking and fingerprinting as much as possible - while minimizing any loss of functionality and breakage (but it will happen). This `user.js` is a **template** which aims to provide as much privacy and enhanced security as possible, and to reduce tracking and fingerprinting as much as possible - while minimizing any loss of functionality and breakage (but it will happen).
Everyone, experts included, should at least read the [implementation](https://github.com/ghacksuserjs/ghacks-user.js/wiki/1.3-Implementation) wiki page, as it contains important information regarding a few `ghacks user.js` settings. Everyone, experts included, should at least read the [implementation](https://github.com/ghacksuserjs/ghacks-user.js/wiki/1.3-Implementation) wiki page, as it contains important information regarding a few `user.js` settings.
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.
@ -13,15 +13,11 @@ Also be aware that this `user.js` is made specifically for desktop Firefox. Usin
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)
### ![][b] acknowledgments ### ![][b] acknowledgments
Literally thousands of sources, references and suggestions. That said... Literally thousands of sources, references and suggestions. Special mention to:
* Martin Brinkmann at [ghacks](https://www.ghacks.net/) <sup>1</sup>
* 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 [Codeberg](https://codeberg.org/12bytes.org/Firefox-user.js-supplement) * 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.
### ![][b] [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) ### ![][b] [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[b]: /wikipiki/bullet01.png [b]: /wikipiki/bullet01.png

View File

@ -1,7 +1,9 @@
/*** /***
This will reset the preferences that are under sections 4600 & 4700 in the ghacks user.js Version: up to and including FF/ESR78
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. This will reset the preferences that are under sections 4600 & 4700 in the
ghacks user.js. These are the prefs that are no longer necessary, or they
conflict with, privacy.resistFingerprinting if you have that enabled.
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]
@ -24,6 +26,8 @@
'webgl.enable-debug-renderer-info', 'webgl.enable-debug-renderer-info',
'dom.w3c_pointer_events.enabled', 'dom.w3c_pointer_events.enabled',
'ui.use_standins_for_native_colors', 'ui.use_standins_for_native_colors',
'ui.systemUsesDarkTheme',
'ui.prefersReducedMotion',
/* section 4700 */ /* section 4700 */
'general.useragent.override', 'general.useragent.override',
'general.buildID.override', 'general.buildID.override',

View File

@ -1,6 +1,8 @@
/*** /***
Version: up to and including FF/ESR78
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 Firefox/ESR 68 and used in the ghacks user.js
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,6 +14,31 @@
let ops = [ let ops = [
/* deprecated */ /* deprecated */
/* 78 */
'media.autoplay.enabled.user-gestures-needed',
'toolkit.cosmeticAnimations.enabled',
/* 77 */
'browser.urlbar.oneOffSearches',
'browser.tabs.remote.allowLinkedWebInFileUriProcess',
/* 76 */
'extensions.blocklist.url',
/* 74 */
'geo.wifi.uri',
'geo.wifi.logging.enabled',
'privacy.userContext.longPressBehavior',
'webgl.disable-extensions',
/* 72 */
'browser.newtabpage.activity-stream.telemetry.ping.endpoint',
'toolkit.telemetry.hybridContent.enabled',
'dom.indexedDB.enabled',
/* 71 */
'devtools.webide.enabled',
'devtools.webide.autoinstallADBExtension',
'offline-apps.allow_by_default',
/* 69 */
'gfx.downloadable_fonts.woff2.enabled',
'plugins.click_to_play',
'media.autoplay.allow-muted',
/* 68 */ /* 68 */
'browser.newtabpage.activity-stream.disableSnippets', 'browser.newtabpage.activity-stream.disableSnippets',
'browser.aboutHomeSnippets.updateUrl', 'browser.aboutHomeSnippets.updateUrl',

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: 12-April-2020 Last updated: 28-July-2020
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]
@ -221,6 +221,8 @@
/* 75-beta */ /* 75-beta */
'browser.search.geoip.url', 'browser.search.geoip.url',
'browser.search.region', 'browser.search.region',
/* 79-beta */
'browser.urlbar.usepreloadedtopurls.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

@ -2,7 +2,7 @@
## ghacks-user.js updater for macOS and Linux ## ghacks-user.js updater for macOS and Linux
## version: 2.5 ## version: 2.7
## Author: Pat Johnson (@overdodactyl) ## Author: Pat Johnson (@overdodactyl)
## Additional contributors: @earthlng, @ema-pe, @claustromaniac ## Additional contributors: @earthlng, @ema-pe, @claustromaniac
@ -11,7 +11,7 @@
readonly CURRDIR=$(pwd) readonly CURRDIR=$(pwd)
sfp=$(readlink -f "${BASH_SOURCE[0]}" 2>/dev/null || greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null) sfp=$(readlink -f "${BASH_SOURCE[0]}" 2>/dev/null || greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null)
if [ -z "$sfp" ]; then sfp=${BASH_SOURCE[0]}; fi [ -z "$sfp" ] && sfp=${BASH_SOURCE[0]}
readonly SCRIPT_DIR=$(dirname "${sfp}") readonly SCRIPT_DIR=$(dirname "${sfp}")
@ -42,9 +42,9 @@ ESR=false
# Download method priority: curl -> wget # Download method priority: curl -> wget
DOWNLOAD_METHOD='' DOWNLOAD_METHOD=''
if [[ $(command -v 'curl') ]]; then if [[ $(command -v 'curl') ]]; then
DOWNLOAD_METHOD='curl' DOWNLOAD_METHOD='curl --max-redirs 3 -so'
elif [[ $(command -v 'wget') ]]; then elif [[ $(command -v 'wget') ]]; then
DOWNLOAD_METHOD='wget' DOWNLOAD_METHOD='wget --max-redirect 3 --quiet -O'
else else
echo -e "${RED}This script requires curl or wget.\nProcess aborted${NC}" echo -e "${RED}This script requires curl or wget.\nProcess aborted${NC}"
exit 0 exit 0
@ -52,15 +52,15 @@ fi
show_banner () { show_banner () {
echo -e "${BBLUE}\n" echo -e "${BBLUE}
echo ' ############################################################################' ############################################################################
echo ' #### ####' #### ####
echo ' #### ghacks user.js ####' #### ghacks user.js ####
echo ' #### Hardening the Privacy and Security Settings of Firefox ####' #### Hardening the Privacy and Security Settings of Firefox ####
echo ' #### Maintained by @Thorin-Oakenpants and @earthlng ####' #### Maintained by @Thorin-Oakenpants and @earthlng ####
echo ' #### Updater for macOS and Linux by @overdodactyl ####' #### Updater for macOS and Linux by @overdodactyl ####
echo ' #### ####' #### ####
echo ' ############################################################################' ############################################################################"
echo -e "${NC}\n" echo -e "${NC}\n"
echo -e "Documentation for this script is available here: ${CYAN}https://github.com/ghacksuserjs/ghacks-user.js/wiki/3.3-Updater-Scripts${NC}\n" echo -e "Documentation for this script is available here: ${CYAN}https://github.com/ghacksuserjs/ghacks-user.js/wiki/3.3-Updater-Scripts${NC}\n"
} }
@ -70,66 +70,50 @@ show_banner () {
######################### #########################
usage() { usage() {
echo -e "${BLUE}\nUsage: $0 [-h] [-p PROFILE] [-u] [-d] [-s] [-n] [-b] [-c] [-v] [-r] [-e] [-o OVERRIDE]\n${NC}" 1>&2 # Echo usage string to standard error echo
echo 'Optional Arguments:' echo -e "${BLUE}Usage: $0 [-bcdehlnrsuv] [-p PROFILE] [-o OVERRIDE]${NC}" 1>&2 # Echo usage string to standard error
echo -e "\t-h,\t\t Show this help message and exit." echo -e "
echo -e "\t-p PROFILE,\t Path to your Firefox profile (if different than the dir of this script)" Optional Arguments:
echo -e "\t\t\t IMPORTANT: if the path include spaces, wrap the entire argument in quotes." -h Show this help message and exit.
echo -e "\t-l, \t\t Choose your Firefox profile from a list" -p PROFILE Path to your Firefox profile (if different than the dir of this script)
echo -e "\t-u,\t\t Update updater.sh and execute silently. Do not seek confirmation." IMPORTANT: if the path includes spaces, wrap the entire argument in quotes.
echo -e "\t-d,\t\t Do not look for updates to updater.sh." -l Choose your Firefox profile from a list
echo -e "\t-s,\t\t Silently update user.js. Do not seek confirmation." -u Update updater.sh and execute silently. Do not seek confirmation.
echo -e "\t-b,\t\t Only keep one backup of each file." -d Do not look for updates to updater.sh.
echo -e "\t-c,\t\t Create a diff file comparing old and new user.js within userjs_diffs. " -s Silently update user.js. Do not seek confirmation.
echo -e "\t-o OVERRIDE,\t Filename or path to overrides file (if different than user-overrides.js)." -b Only keep one backup of each file.
echo -e "\t\t\t If used with -p, paths should be relative to PROFILE or absolute paths" -c Create a diff file comparing old and new user.js within userjs_diffs.
echo -e "\t\t\t If given a directory, all files inside will be appended recursively." -o OVERRIDE Filename or path to overrides file (if different than user-overrides.js).
echo -e "\t\t\t You can pass multiple files or directories by passing a comma separated list." If used with -p, paths should be relative to PROFILE or absolute paths
echo -e "\t\t\t\t Note: If a directory is given, only files inside ending in the extension .js are appended" If given a directory, all files inside will be appended recursively.
echo -e "\t\t\t\t IMPORTANT: do not add spaces between files/paths. Ex: -o file1.js,file2.js,dir1" You can pass multiple files or directories by passing a comma separated list.
echo -e "\t\t\t\t IMPORTANT: if any files/paths include spaces, wrap the entire argument in quotes." Note: If a directory is given, only files inside ending in the extension .js are appended
echo -e "\t\t\t\t\t Ex: -o \"override folder\" " IMPORTANT: do not add spaces between files/paths. Ex: -o file1.js,file2.js,dir1
echo -e "\t-n,\t\t Do not append any overrides, even if user-overrides.js exists." IMPORTANT: if any files/paths include spaces, wrap the entire argument in quotes.
echo -e "\t-v,\t\t Open the resulting user.js file." Ex: -o \"override folder\"
echo -e "\t-r,\t\t Only download user.js to a temporary file and open it." -n Do not append any overrides, even if user-overrides.js exists.
echo -e "\t-e,\t\t Activate ESR related preferences." -v Open the resulting user.js file.
echo -e -r Only download user.js to a temporary file and open it.
echo 'Deprecated Arguments (they still work for now):' -e Activate ESR related preferences."
echo -e "\t-donotupdate,\t Use instead -d" echo
echo -e "\t-update,\t Use instead -u"
echo -e
exit 1 exit 1
} }
legacy_argument () {
echo -e "${ORANGE}\nWarning: command line arguments have changed."
echo -e "$1 has been deprecated and may not work in the future.\n"
echo -e "Please view the new options using the -h argument.${NC}"
}
######################### #########################
# File Handling # # File Handling #
######################### #########################
# Download files # Download files
download_file () { download_file () { # expects URL as argument ($1)
declare -r url=$1
declare -r tf=$(mktemp) declare -r tf=$(mktemp)
local dlcmd=''
if [ $DOWNLOAD_METHOD = 'curl' ]; then $DOWNLOAD_METHOD "${tf}" "$1" && echo "$tf" || echo '' # return the temp-filename or empty string on error
dlcmd="curl -o $tf"
else
dlcmd="wget -O $tf"
fi
$dlcmd "${url}" &>/dev/null && echo "$tf" || echo '' # return the temp-filename (or empty string on error)
} }
open_file () { #expects one argument: file_path open_file () { #expects one argument: file_path
if [ "$(uname)" == 'Darwin' ]; then if [ "$(uname)" == 'Darwin' ]; then
open "$1" open "$1"
elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then elif [ "$(uname -s | cut -c -5)" == "Linux" ]; then
xdg-open "$1" xdg-open "$1"
else else
echo -e "${RED}Error: Sorry, opening files is not supported for your OS.${NC}" echo -e "${RED}Error: Sorry, opening files is not supported for your OS.${NC}"
@ -204,23 +188,22 @@ get_updater_version () {
# Update updater.sh # Update updater.sh
# Default: Check for update, if available, ask user if they want to execute it # Default: Check for update, if available, ask user if they want to execute it
# Args: # Args:
# -donotupdate: New version will not be looked for and update will not occur # -d: New version will not be looked for and update will not occur
# -update: Check for update, if available, execute without asking # -u: Check for update, if available, execute without asking
update_updater () { update_updater () {
if [ $UPDATE = 'no' ]; then if [ $UPDATE = 'no' ]; then
return 0 # User signified not to check for updates return 0 # User signified not to check for updates
fi fi
declare -r tmpfile=$(download_file 'https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/updater.sh') declare -r tmpfile="$(download_file 'https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/updater.sh')"
[ -z "${tmpfile}" ] && echo -e "${RED}Error! Could not download updater.sh${NC}" && return 1 # check if download failed
if [[ $(get_updater_version "${SCRIPT_DIR}/updater.sh") < $(get_updater_version "${tmpfile}") ]]; then if [[ $(get_updater_version "${SCRIPT_DIR}/updater.sh") < $(get_updater_version "${tmpfile}") ]]; then
if [ $UPDATE = 'check' ]; then if [ $UPDATE = 'check' ]; then
echo -e "There is a newer version of updater.sh available. ${RED}Update and execute Y/N?${NC}" echo -e "There is a newer version of updater.sh available. ${RED}Update and execute Y/N?${NC}"
read -p "" -n 1 -r read -p "" -n 1 -r
echo -e "\n\n" echo -e "\n\n"
if [[ $REPLY =~ ^[Nn]$ ]]; then [[ $REPLY =~ ^[Nn]$ ]] && return 0 # Update available, but user chooses not to update
return 0 # Update available, but user chooses not to update
fi
fi fi
else else
return 0 # No update available return 0 # No update available
@ -238,11 +221,7 @@ update_updater () {
# Returns version number of a user.js file # Returns version number of a user.js file
get_userjs_version () { get_userjs_version () {
if [ -e $1 ]; then [ -e $1 ] && echo "$(sed -n '4p' "$1")" || echo "Not detected."
echo "$(sed -n '4p' "$1")"
else
echo "Not detected."
fi
} }
add_override () { add_override () {
@ -252,7 +231,7 @@ add_override () {
cat "$input" >> user.js cat "$input" >> user.js
echo -e "Status: ${GREEN}Override file appended:${NC} ${input}" echo -e "Status: ${GREEN}Override file appended:${NC} ${input}"
elif [ -d "$input" ]; then elif [ -d "$input" ]; then
FSAVEIFS=$IFS SAVEIFS=$IFS
IFS=$'\n\b' # Set IFS IFS=$'\n\b' # Set IFS
FILES="${input}"/*.js FILES="${input}"/*.js
for f in $FILES for f in $FILES
@ -271,12 +250,13 @@ remove_comments () { # expects 2 arguments: from-file and to-file
# Applies latest version of user.js and any custom overrides # Applies latest version of user.js and any custom overrides
update_userjs () { update_userjs () {
declare -r newfile=$(download_file 'https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/user.js') declare -r newfile="$(download_file 'https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/user.js')"
[ -z "${newfile}" ] && echo -e "${RED}Error! Could not download user.js${NC}" && return 1 # check if download failed
echo 'Please observe the following information:' echo -e "Please observe the following information:
echo -e "\tFirefox profile: ${ORANGE}$(pwd)${NC}" Firefox profile: ${ORANGE}$(pwd)${NC}
echo -e "\tAvailable online: ${ORANGE}$(get_userjs_version $newfile)${NC}" Available online: ${ORANGE}$(get_userjs_version $newfile)${NC}
echo -e "\tCurrently using: ${ORANGE}$(get_userjs_version user.js)\n${NC}\n" Currently using: ${ORANGE}$(get_userjs_version user.js)${NC}\n\n"
if [ $CONFIRM = 'yes' ]; then if [ $CONFIRM = 'yes' ]; then
echo -e "This script will update to the latest user.js file and append any custom configurations from user-overrides.js. ${RED}Continue Y/N? ${NC}" echo -e "This script will update to the latest user.js file and append any custom configurations from user-overrides.js. ${RED}Continue Y/N? ${NC}"
@ -298,9 +278,7 @@ update_userjs () {
# backup user.js # backup user.js
mkdir -p userjs_backups mkdir -p userjs_backups
local bakname="userjs_backups/user.js.backup.$(date +"%Y-%m-%d_%H%M")" local bakname="userjs_backups/user.js.backup.$(date +"%Y-%m-%d_%H%M")"
if [ $BACKUP = 'single' ]; then [ $BACKUP = 'single' ] && bakname='userjs_backups/user.js.backup'
bakname='userjs_backups/user.js.backup'
fi
cp user.js "$bakname" &>/dev/null cp user.js "$bakname" &>/dev/null
mv "${newfile}" user.js mv "${newfile}" user.js
@ -313,8 +291,10 @@ update_userjs () {
# apply overrides # apply overrides
if [ "$SKIPOVERRIDE" = false ]; then if [ "$SKIPOVERRIDE" = false ]; then
while IFS=',' read -ra FILE; do while IFS=',' read -ra FILES; do
add_override "$FILE" for FILE in "${FILES[@]}"; do
add_override "$FILE"
done
done <<< "$OVERRIDE" done <<< "$OVERRIDE"
fi fi
@ -334,14 +314,12 @@ update_userjs () {
echo -e "Status: ${GREEN}A diff file was created:${NC} ${PWD}/${diffname}" echo -e "Status: ${GREEN}A diff file was created:${NC} ${PWD}/${diffname}"
else else
echo -e "Warning: ${ORANGE}Your new user.js file appears to be identical. No diff file was created.${NC}" echo -e "Warning: ${ORANGE}Your new user.js file appears to be identical. No diff file was created.${NC}"
if [ $BACKUP = 'multiple' ]; then [ $BACKUP = 'multiple' ] && rm $bakname &>/dev/null
rm $bakname &>/dev/null
fi
fi fi
rm $past_nocomments $current_nocomments $pastuserjs &>/dev/null rm $past_nocomments $current_nocomments $pastuserjs &>/dev/null
fi fi
if [ "$VIEW" = true ]; then open_file "${PWD}/user.js"; fi [ "$VIEW" = true ] && open_file "${PWD}/user.js"
} }
######################### #########################
@ -349,16 +327,9 @@ update_userjs () {
######################### #########################
if [ $# != 0 ]; then if [ $# != 0 ]; then
readonly legacy_lc=$(echo $1 | tr '[A-Z]' '[a-z]')
# Display usage if first argument is -help or --help # Display usage if first argument is -help or --help
if [ $1 = '--help' ] || [ $1 = '-help' ]; then if [ $1 = '--help' ] || [ $1 = '-help' ]; then
usage usage
elif [ $legacy_lc = '-donotupdate' ]; then
UPDATE='no'
legacy_argument $1
elif [ $legacy_lc = '-update' ]; then
UPDATE='yes'
legacy_argument $1
else else
while getopts ":hp:ludsno:bcvre" opt; do while getopts ":hp:ludsno:bcvre" opt; do
case $opt in case $opt in
@ -399,7 +370,8 @@ if [ $# != 0 ]; then
ESR=true ESR=true
;; ;;
r) r)
tfile=$(download_file 'https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/user.js') tfile="$(download_file 'https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/user.js')"
[ -z "${tfile}" ] && echo -e "${RED}Error! Could not download user.js${NC}" && exit 1 # check if download failed
mv $tfile "${tfile}.js" mv $tfile "${tfile}.js"
echo -e "${ORANGE}Warning: user.js was saved to temporary file ${tfile}.js${NC}" echo -e "${ORANGE}Warning: user.js was saved to temporary file ${tfile}.js${NC}"
open_file "${tfile}.js" open_file "${tfile}.js"

296
user.js
View File

@ -1,8 +1,7 @@
/****** /******
* name: ghacks user.js * name: ghacks user.js
* date: 24 May 2020 * date: 28 Aug 2020
* version 76 * version 80-beta
* 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
@ -117,7 +116,7 @@ user_pref("browser.newtabpage.activity-stream.telemetry", false);
* 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.feeds.snippets", false); user_pref("browser.newtabpage.activity-stream.feeds.snippets", false);
user_pref("browser.newtabpage.activity-stream.asrouter.providers.snippets", ""); 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);
@ -125,6 +124,9 @@ user_pref("browser.newtabpage.activity-stream.showSponsored", false);
user_pref("browser.newtabpage.activity-stream.feeds.discoverystreamfeed", false); // [FF66+] user_pref("browser.newtabpage.activity-stream.feeds.discoverystreamfeed", false); // [FF66+]
/* 0105d: disable Activity Stream recent Highlights in the Library [FF57+] ***/ /* 0105d: disable Activity Stream recent Highlights in the Library [FF57+] ***/
// user_pref("browser.library.activity-stream.enabled", false); // user_pref("browser.library.activity-stream.enabled", false);
/* 0105e: clear default topsites
* [NOTE] This does not block you from adding your own ***/
user_pref("browser.newtabpage.activity-stream.default.sites", "");
/* 0110: start Firefox in PB (Private Browsing) mode /* 0110: start Firefox in PB (Private Browsing) mode
* [NOTE] In this mode *all* windows are "private windows" and the PB mode icon is not displayed * [NOTE] In this mode *all* windows are "private windows" and the PB mode icon is not displayed
* [WARNING] The P in PB mode is misleading: it means no "persistent" disk storage such as history, * [WARNING] The P in PB mode is misleading: it means no "persistent" disk storage such as history,
@ -162,6 +164,13 @@ user_pref("geo.provider.use_gpsd", false); // [LINUX]
* 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: disable region updates
* [1] https://firefox-source-docs.mozilla.org/toolkit/modules/toolkit_modules/Region.html ***/
user_pref("browser.region.network.url", ""); // [FF78+]
user_pref("browser.region.update.enabled", false); // [[FF79+]
/* 0208: set search region
* [NOTE] May not be hidden if Firefox has changed your settings due to your region (see 0207) ***/
// user_pref("browser.search.region", "US"); // [HIDDEN PREF]
/** LANGUAGE / LOCALE ***/ /** LANGUAGE / LOCALE ***/
/* 0210: set preferred language for displaying web pages /* 0210: set preferred language for displaying web pages
@ -172,13 +181,6 @@ user_pref("intl.accept_languages", "en-US, en");
* [1] https://bugzilla.mozilla.org/867501 * [1] https://bugzilla.mozilla.org/867501
* [2] https://bugzilla.mozilla.org/1629630 ***/ * [2] https://bugzilla.mozilla.org/1629630 ***/
user_pref("javascript.use_us_english_locale", true); // [HIDDEN PREF] user_pref("javascript.use_us_english_locale", true); // [HIDDEN PREF]
/* 0212: enforce fallback text encoding to match en-US
* When the content or server doesn't declare a charset the browser will
* fallback to the "Current locale" based on your application language
* [SETTING] General>Language and Appearance>Fonts and Colors>Advanced>Text Encoding for Legacy Content
* [TEST] https://hsivonen.com/test/moz/check-charset.htm
* [1] https://trac.torproject.org/projects/tor/ticket/20025 ***/
user_pref("intl.charset.fallback.override", "windows-1252");
/*** [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
@ -205,7 +207,7 @@ user_pref("app.update.auto", false);
// user_pref("extensions.getAddons.cache.enabled", false); // user_pref("extensions.getAddons.cache.enabled", false);
/* 0308: disable search engine updates (e.g. OpenSearch) /* 0308: disable search engine updates (e.g. OpenSearch)
* [NOTE] This does not affect Mozilla's built-in or Web Extension search engines * [NOTE] This does not affect Mozilla's built-in or Web Extension search engines
* [SETTING] General>Firefox Updates>Automatically update search engines ***/ * [SETTING] General>Firefox Updates>Automatically update search engines (FF72-) ***/
user_pref("browser.search.update", false); user_pref("browser.search.update", false);
/* 0309: disable sending Flash crash reports ***/ /* 0309: disable sending Flash crash reports ***/
user_pref("dom.ipc.plugins.flash.subprocess.crashreporter.enabled", false); user_pref("dom.ipc.plugins.flash.subprocess.crashreporter.enabled", false);
@ -344,17 +346,14 @@ user_pref("extensions.systemAddon.update.url", ""); // [FF44+]
* Currently blocked by 'datareporting.healthreport.uploadEnabled' (see 0340) ***/ * Currently blocked by 'datareporting.healthreport.uploadEnabled' (see 0340) ***/
user_pref("browser.ping-centre.telemetry", false); user_pref("browser.ping-centre.telemetry", false);
/* 0515: disable Screenshots /* 0515: disable Screenshots
* alternatively in FF60+, disable uploading to the Screenshots server * alternatively in FF60+, disable uploading to the Screenshots server ***/
* [1] https://github.com/mozilla-services/screenshots
* [2] https://www.ghacks.net/2017/05/28/firefox-screenshots-integrated-in-firefox-nightly/ ***/
// user_pref("extensions.screenshots.disabled", true); // [FF55+] // user_pref("extensions.screenshots.disabled", true); // [FF55+]
// user_pref("extensions.screenshots.upload-disabled", true); // [FF60+] // user_pref("extensions.screenshots.upload-disabled", true); // [FF60+]
/* 0517: disable Form Autofill /* 0517: disable Form Autofill
* [NOTE] Stored data is NOT secure (uses a JSON file) * [NOTE] Stored data is NOT secure (uses a JSON file)
* [NOTE] Heuristics controls Form Autofill on forms without @autocomplete attributes * [NOTE] Heuristics controls Form Autofill on forms without @autocomplete attributes
* [SETTING] Privacy & Security>Forms and Autofill>Autofill addresses (FF74+) * [SETTING] Privacy & Security>Forms and Autofill>Autofill addresses (FF74+)
* [1] https://wiki.mozilla.org/Firefox/Features/Form_Autofill * [1] https://wiki.mozilla.org/Firefox/Features/Form_Autofill ***/
* [2] https://www.ghacks.net/2017/05/24/firefoxs-new-form-autofill-is-awesome/ ***/
user_pref("extensions.formautofill.addresses.enabled", false); // [FF55+] user_pref("extensions.formautofill.addresses.enabled", false); // [FF55+]
user_pref("extensions.formautofill.available", "off"); // [FF56+] user_pref("extensions.formautofill.available", "off"); // [FF56+]
user_pref("extensions.formautofill.creditCards.enabled", false); // [FF56+] user_pref("extensions.formautofill.creditCards.enabled", false); // [FF56+]
@ -369,16 +368,14 @@ user_pref("_user.js.parrot", "0600 syntax error: the parrot's no more!");
* [1] https://developer.mozilla.org/docs/Web/HTTP/Link_prefetching_FAQ ***/ * [1] https://developer.mozilla.org/docs/Web/HTTP/Link_prefetching_FAQ ***/
user_pref("network.prefetch-next", false); user_pref("network.prefetch-next", false);
/* 0602: disable DNS prefetching /* 0602: disable DNS prefetching
* [1] https://www.ghacks.net/2013/04/27/firefox-prefetching-what-you-need-to-know/ * [1] 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 ESR] [DEFAULT: true FF70+] user_pref("network.dns.disablePrefetchFromHTTPS", true); // [HIDDEN PREF ESR68 or lower] [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+]
/* 0605: disable link-mouseover opening connection to linked server /* 0605: disable link-mouseover opening connection to linked server
* [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/ ***/
user_pref("network.http.speculative-parallel-limit", 0); user_pref("network.http.speculative-parallel-limit", 0);
/* 0606: disable "Hyperlink Auditing" (click tracking) and enforce same host in case /* 0606: disable "Hyperlink Auditing" (click tracking) and enforce same host in case
* [1] https://www.bleepingcomputer.com/news/software/major-browsers-to-prevent-disabling-of-click-tracking-privacy-risk/ ***/ * [1] https://www.bleepingcomputer.com/news/software/major-browsers-to-prevent-disabling-of-click-tracking-privacy-risk/ ***/
@ -390,7 +387,7 @@ user_pref("_user.js.parrot", "0700 syntax error: the parrot's given up the ghost
/* 0701: disable IPv6 /* 0701: disable IPv6
* IPv6 can be abused, especially regarding MAC addresses. They also do not play nice * IPv6 can be abused, especially regarding MAC addresses. They also do not play nice
* with VPNs. That's even assuming your ISP and/or router and/or website can handle it. * with VPNs. That's even assuming your ISP and/or router and/or website can handle it.
* Firefox telemetry (April 2019) shows only 5% of all connections are IPv6 * [STATS] Firefox telemetry (June 2020) 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 masking 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.
@ -426,17 +423,17 @@ user_pref("network.http.altsvc.oe", false);
* [1] https://trac.torproject.org/projects/tor/wiki/doc/TorifyHOWTO/WebBrowsers ***/ * [1] 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);
/* 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.fxsitecompat.dev/en-CA/docs/2020/ftp-support-will-be-removed/ ***/
// user_pref("network.ftp.enabled", false); // user_pref("network.ftp.enabled", false);
/* 0709: disable using UNC (Uniform Naming Convention) paths [FF61+] /* 0709: disable using UNC (Uniform Naming Convention) paths [FF61+]
* [SETUP-CHROME] Can break extensions for profiles on network shares * [SETUP-CHROME] Can break extensions for profiles on network shares
* [1] https://trac.torproject.org/projects/tor/ticket/26424 ***/ * [1] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/26424 ***/
user_pref("network.file.disable_unc_paths", true); // [HIDDEN PREF] user_pref("network.file.disable_unc_paths", true); // [HIDDEN PREF]
/* 0710: disable GIO as a potential proxy bypass vector /* 0710: disable GIO as a potential proxy bypass vector
* Gvfs/GIO has a set of supported protocols like obex, network, archive, computer, dav, cdda, * Gvfs/GIO has a set of supported protocols like obex, network, archive, computer, dav, cdda,
* gphoto2, trash, etc. By default only smb and sftp protocols are accepted so far (as of FF64) * gphoto2, trash, etc. By default only smb and sftp protocols are accepted so far (as of FF64)
* [1] https://bugzilla.mozilla.org/1433507 * [1] https://bugzilla.mozilla.org/1433507
* [2] https://trac.torproject.org/23044 * [2] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/23044
* [3] https://en.wikipedia.org/wiki/GVfs * [3] https://en.wikipedia.org/wiki/GVfs
* [4] https://en.wikipedia.org/wiki/GIO_(software) ***/ * [4] https://en.wikipedia.org/wiki/GIO_(software) ***/
user_pref("network.gio.supported-protocols", ""); // [HIDDEN PREF] user_pref("network.gio.supported-protocols", ""); // [HIDDEN PREF]
@ -453,9 +450,8 @@ user_pref("_user.js.parrot", "0800 syntax error: the parrot's ceased to be!");
/* 0801: disable location bar using search /* 0801: disable location bar using search
* Don't leak URL typos to a search engine, give an error message instead. * Don't leak URL typos to a search engine, give an error message instead.
* Examples: "secretplace,com", "secretplace/com", "secretplace com", "secret place.com" * Examples: "secretplace,com", "secretplace/com", "secretplace com", "secret place.com"
* [NOTE] Search buttons in the dropdown work, but hitting 'enter' in the location bar will fail * [NOTE] This does **not** affect explicit user action such as using search buttons in the
* [TIP] You can add keywords to search engines in options (e.g. 'd' for DuckDuckGo) and * dropdown, or using keyword search shortcuts you configure in options (e.g. 'd' for DuckDuckGo)
* the dropdown will now auto-select it and you can then hit 'enter' and it will work
* [SETUP-CHROME] If you don't, or rarely, type URLs, or you use a default search * [SETUP-CHROME] If you don't, or rarely, type URLs, or you use a default search
* engine that respects privacy, then you probably don't need this ***/ * engine that respects privacy, then you probably don't need this ***/
user_pref("keyword.enabled", false); user_pref("keyword.enabled", false);
@ -483,18 +479,20 @@ user_pref("layout.css.visited_links_enabled", false);
* [SETTING] Search>Provide search suggestions | Show search suggestions in address bar results ***/ * [SETTING] Search>Provide search suggestions | Show search suggestions in address bar results ***/
user_pref("browser.search.suggest.enabled", false); user_pref("browser.search.suggest.enabled", false);
user_pref("browser.urlbar.suggest.searches", false); user_pref("browser.urlbar.suggest.searches", false);
/* 0809: disable location bar suggesting "preloaded" top websites [FF54+]
* [1] https://bugzilla.mozilla.org/1211726 ***/
user_pref("browser.urlbar.usepreloadedtopurls.enabled", false);
/* 0810: disable location bar making speculative connections [FF56+] /* 0810: disable location bar making speculative connections [FF56+]
* [1] https://bugzilla.mozilla.org/1348275 ***/ * [1] https://bugzilla.mozilla.org/1348275 ***/
user_pref("browser.urlbar.speculativeConnect.enabled", false); user_pref("browser.urlbar.speculativeConnect.enabled", false);
/* 0811: disable location bar leaking single words to a DNS provider **after searching** [FF78+]
* 0=never resolve single words, 1=heuristic (default), 2=always resolve
* [NOTE] For FF78 value 1 and 2 are the same and always resolve but that will change in future versions
* [1] https://bugzilla.mozilla.org/1642623 ***/
user_pref("browser.urlbar.dnsResolveSingleWordsAfterSearch", 0);
/* 0850a: disable location bar suggestion types /* 0850a: disable location bar suggestion types
* If all three suggestion types are false, search engine keywords are disabled
* [SETTING] Privacy & Security>Address Bar>When using the address bar, suggest ***/ * [SETTING] Privacy & Security>Address Bar>When using the address bar, suggest ***/
// user_pref("browser.urlbar.suggest.history", false); // user_pref("browser.urlbar.suggest.history", false);
// user_pref("browser.urlbar.suggest.bookmark", false); // user_pref("browser.urlbar.suggest.bookmark", false);
// user_pref("browser.urlbar.suggest.openpage", false); // user_pref("browser.urlbar.suggest.openpage", false);
// user_pref("browser.urlbar.suggest.topsites", false); // [FF78+]
/* 0850c: disable location bar dropdown /* 0850c: disable location bar dropdown
* This value controls the total number of entries to appear in the location bar dropdown * This value controls the total number of entries to appear in the location bar dropdown
* [NOTE] Items (bookmarks/history/openpages) with a high "frecency"/"bonus" will always * [NOTE] Items (bookmarks/history/openpages) with a high "frecency"/"bonus" will always
@ -506,9 +504,6 @@ user_pref("browser.urlbar.speculativeConnect.enabled", false);
/* 0850d: disable location bar autofill /* 0850d: disable location bar autofill
* [1] https://support.mozilla.org/en-US/kb/address-bar-autocomplete-firefox#w_url-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+]
* [1] https://www.ghacks.net/2016/08/09/firefox-one-off-searches-address-bar/ ***/
// user_pref("browser.urlbar.oneOffSearches", false);
/* 0860: disable search and form history /* 0860: disable search and form history
* [SETUP-WEB] Be aware thet autocomplete form data can be read by third parties, see [1] [2] * [SETUP-WEB] Be aware thet autocomplete form data can be read by third parties, see [1] [2]
* [NOTE] We also clear formdata on exit (see 2803) * [NOTE] We also clear formdata on exit (see 2803)
@ -534,20 +529,21 @@ user_pref("_user.js.parrot", "0900 syntax error: the parrot's expired!");
* [NOTE] This does not clear any passwords already saved * [NOTE] This does not clear any passwords already saved
* [SETTING] Privacy & Security>Logins and Passwords>Ask to save logins and passwords for websites ***/ * [SETTING] Privacy & Security>Logins and Passwords>Ask to save logins and passwords for websites ***/
// user_pref("signon.rememberSignons", false); // user_pref("signon.rememberSignons", false);
/* 0902: use a master password /* 0902: use a primary password
* There are no preferences for this. It is all handled internally. * There are no preferences for this. It is all handled internally.
* [SETTING] Privacy & Security>Logins and Passwords>Use a master password * [SETTING] Privacy & Security>Logins and Passwords>Use a Primary Password
* [1] https://support.mozilla.org/kb/use-master-password-protect-stored-logins ***/ * [1] https://support.mozilla.org/kb/use-primary-password-protect-stored-logins-and-pas ***/
/* 0903: set how often Firefox should ask for the master password /* 0903: set how often Firefox should ask for the primary password
* 0=the first time (default), 1=every time it's needed, 2=every n minutes (see 0904) ***/ * 0=the first time (default), 1=every time it's needed, 2=every n minutes (see 0904) ***/
user_pref("security.ask_for_password", 2); user_pref("security.ask_for_password", 2);
/* 0904: set how often in minutes Firefox should ask for the master password (see 0903) /* 0904: set how often in minutes Firefox should ask for the primary password (see 0903)
* 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] Username & password is still available when you enter the field * [NOTE] Username & password is still available when you enter the field
* [SETTING] Privacy & Security>Logins and Passwords>Autofill logins and passwords ***/ * [SETTING] Privacy & Security>Logins and Passwords>Autofill logins and passwords
* [1] https://freedom-to-tinker.com/2017/12/27/no-boundaries-for-user-identities-web-trackers-exploit-browser-login-managers/ ***/
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);
@ -583,7 +579,7 @@ user_pref("_user.js.parrot", "1000 syntax error: the parrot's gone to meet 'is m
* [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);
/* 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 kibibytes ***/
// user_pref("browser.cache.memory.enable", false); // user_pref("browser.cache.memory.enable", false);
// user_pref("browser.cache.memory.capacity", 0); // [HIDDEN PREF ESR] // 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]
@ -591,9 +587,9 @@ user_pref("browser.cache.disk.enable", false);
* [1] https://bugzilla.mozilla.org/967812 ***/ * [1] https://bugzilla.mozilla.org/967812 ***/
// user_pref("permissions.memory_only", true); // [HIDDEN PREF] // user_pref("permissions.memory_only", true); // [HIDDEN PREF]
/* 1007: disable media cache from writing to disk in Private Browsing /* 1007: disable media cache from writing to disk in Private Browsing
* [NOTE] MSE (Media Source Extensions) are already stored in-memory in PB */ * [NOTE] MSE (Media Source Extensions) are already stored in-memory in PB ***/
user_pref("browser.privatebrowsing.forceMediaMemoryCache", true); // [FF75+] user_pref("browser.privatebrowsing.forceMediaMemoryCache", true); // [FF75+]
user_pref("media.memory_cache_max_size", 16384); user_pref("media.memory_cache_max_size", 65536);
/** SESSIONS & SESSION RESTORE ***/ /** SESSIONS & SESSION RESTORE ***/
/* 1020: exclude "Undo Closed Tabs" in Session Restore ***/ /* 1020: exclude "Undo Closed Tabs" in Session Restore ***/
@ -635,6 +631,8 @@ user_pref("browser.shell.shortcutFavicons", false);
/*** [SECTION 1200]: HTTPS (SSL/TLS / OCSP / CERTS / HPKP / CIPHERS) /*** [SECTION 1200]: HTTPS (SSL/TLS / OCSP / CERTS / HPKP / CIPHERS)
Your cipher and other settings can be used in server side fingerprinting Your cipher and other settings can be used in server side fingerprinting
[TEST] https://www.ssllabs.com/ssltest/viewMyClient.html [TEST] https://www.ssllabs.com/ssltest/viewMyClient.html
[TEST] https://browserleaks.com/ssl
[TEST] https://ja3er.com/
[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!");
@ -651,10 +649,10 @@ user_pref("_user.js.parrot", "1200 syntax error: the parrot's a stiff!");
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
* [STATS] Firefox telemetry (June 2020) shows only 0.16% of SSL handshakes use 1.0 or 1.1
* [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 2020) shows only 0.25% of TLS web traffic uses 1.0 or 1.1
* [1] https://www.ssllabs.com/ssl-pulse/ ***/ * [1] https://www.ssllabs.com/ssl-pulse/ ***/
// user_pref("security.tls.version.min", 3); // user_pref("security.tls.version.min", 3); // [DEFAULT: 3 FF78+]
// user_pref("security.tls.version.max", 4); // user_pref("security.tls.version.max", 4);
/* 1203: enforce TLS 1.0 and 1.1 downgrades as session only */ /* 1203: enforce TLS 1.0 and 1.1 downgrades as session only */
user_pref("security.tls.version.enable-deprecated", false); user_pref("security.tls.version.enable-deprecated", false);
@ -713,7 +711,7 @@ user_pref("security.pki.sha1_enforcement_level", 1);
* 0=disable detecting Family Safety mode and importing the root * 0=disable detecting Family Safety mode and importing the root
* 1=only attempt to detect Family Safety mode (don't import the root) * 1=only attempt to detect Family Safety mode (don't import the root)
* 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://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/21686 ***/
user_pref("security.family_safety.mode", 0); user_pref("security.family_safety.mode", 0);
/* 1222: disable intermediate certificate caching (fingerprinting attack vector) [FF41+] [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.
@ -724,45 +722,58 @@ user_pref("security.family_safety.mode", 0);
* 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
* [SETUP-WEB] If you rely on an AV (antivirus) to protect your web browsing * [SETUP-WEB] If you rely on an AV (antivirus) to protect your web browsing
* by inspecting ALL your web traffic, then leave at current default=1 * by inspecting ALL your web traffic, then leave at current default=1
* [1] https://trac.torproject.org/projects/tor/ticket/16206 ***/ * [1] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/16206 ***/
user_pref("security.cert_pinning.enforcement_level", 2); user_pref("security.cert_pinning.enforcement_level", 2);
/** MIXED CONTENT ***/ /** MIXED CONTENT ***/
/* 1240: disable insecure active content on https pages /* 1240: disable insecure active content on https pages
* [1] https://trac.torproject.org/projects/tor/ticket/21323 ***/ * [1] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/21323 ***/
user_pref("security.mixed_content.block_active_content", true); // [DEFAULT: true] user_pref("security.mixed_content.block_active_content", true); // [DEFAULT: true]
/* 1241: disable insecure passive content (such as images) on https pages [SETUP-WEB] ***/ /* 1241: disable insecure passive content (such as images) on https pages [SETUP-WEB] ***/
user_pref("security.mixed_content.block_display_content", true); user_pref("security.mixed_content.block_display_content", true);
/* 1243: block unencrypted requests from Flash on encrypted pages to mitigate MitM attacks [FF59+] /* 1243: block unencrypted requests from Flash on encrypted pages to mitigate MitM attacks [FF59+]
* [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);
/* 1244: enable https-only-mode [FF76+] /* 1244: enable HTTPS-Only mode [FF76+]
* [NOTE] This is experimental * When "https_only_mode" (all windows) is true, "https_only_mode_pbm" (private windows only) is ignored
* [1] https://bugzilla.mozilla.org/1613063 */ * [SETTING] to add site exceptions: Page Info>Permissions>Use insecure HTTP (FF80+)
// user_pref("dom.security.https_only_mode", true); * [SETTING] Privacy & Security>HTTPS-Only Mode (FF80+ with browser.preferences.exposeHTTPSOnly = true)
* [1] https://bugzilla.mozilla.org/1613063 ***/
// user_pref("dom.security.https_only_mode", true); // [FF76+]
// user_pref("dom.security.https_only_mode_pbm", true); // [FF80+]
// user_pref("dom.security.https_only_mode.upgrade_local", true); // [FF77+]
/** CIPHERS [WARNING: do not meddle with your cipher suite: 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) * These are all the ciphers still using SHA-1 and CBC which are weaker than the available alternatives. (see "Cipher Suites" in [1])
* Additionally some have other weaknesses like key sizes of 128 (or lower) [2] and/or no Perfect Forward Secrecy [3].
* [1] https://browserleaks.com/ssl
* [2] https://en.wikipedia.org/wiki/Key_size
* [3] https://en.wikipedia.org/wiki/Forward_secrecy
***/
/* 1261: disable 3DES (effective key size < 128 and no PFS)
* [1] https://en.wikipedia.org/wiki/3des#Security * [1] https://en.wikipedia.org/wiki/3des#Security
* [2] https://en.wikipedia.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 ***/
// user_pref("security.ssl3.ecdhe_ecdsa_aes_128_sha", false);
// user_pref("security.ssl3.ecdhe_rsa_aes_128_sha", false);
/* 1263: disable DHE (Diffie-Hellman Key Exchange) /* 1263: disable DHE (Diffie-Hellman Key Exchange)
* [1] https://www.eff.org/deeplinks/2015/10/how-to-protect-yourself-from-nsa-attacks-1024-bit-DH ***/ * [1] https://www.eff.org/deeplinks/2015/10/how-to-protect-yourself-from-nsa-attacks-1024-bit-DH ***/
// user_pref("security.ssl3.dhe_rsa_aes_128_sha", false); // user_pref("security.ssl3.dhe_rsa_aes_128_sha", false); // [DEFAULT: false FF78+]
// user_pref("security.ssl3.dhe_rsa_aes_256_sha", false); // user_pref("security.ssl3.dhe_rsa_aes_256_sha", false); // [DEFAULT: false FF78+]
/* 1264: disable the remaining non-modern cipher suites as of FF52 ***/ /* 1264: disable the remaining non-modern cipher suites as of FF78 (in order of preferred by FF) ***/
// user_pref("security.ssl3.rsa_aes_128_sha", false); // user_pref("security.ssl3.ecdhe_ecdsa_aes_256_sha", false);
// user_pref("security.ssl3.rsa_aes_256_sha", false); // user_pref("security.ssl3.ecdhe_ecdsa_aes_128_sha", false);
// user_pref("security.ssl3.ecdhe_rsa_aes_128_sha", false);
// user_pref("security.ssl3.ecdhe_rsa_aes_256_sha", false);
// user_pref("security.ssl3.rsa_aes_128_sha", false); // no PFS
// user_pref("security.ssl3.rsa_aes_256_sha", false); // no PFS
/** UI (User Interface) ***/ /** UI (User Interface) ***/
/* 1270: display warning on the padlock for "broken security" (if 1201 is false) /* 1270: display warning on the padlock for "broken security" (if 1201 is false)
* Bug: warning padlock not indicated for subresources on a secure page! [2] * Bug: warning padlock not indicated for subresources on a secure page! [2]
* [STATS] SSL Labs (June 2020) reports 98.8% of sites have secure renegotiation [3]
* [1] https://wiki.mozilla.org/Security:Renegotiation * [1] https://wiki.mozilla.org/Security:Renegotiation
* [2] https://bugzilla.mozilla.org/1353705 ***/ * [2] https://bugzilla.mozilla.org/1353705
* [3] https://www.ssllabs.com/ssl-pulse/ ***/
user_pref("security.ssl.treat_unsafe_negotiation_as_broken", true); user_pref("security.ssl.treat_unsafe_negotiation_as_broken", true);
/* 1271: control "Add Security Exception" dialog on SSL warnings /* 1271: control "Add Security Exception" dialog on SSL warnings
* 0=do neither 1=pre-populate url 2=pre-populate url + pre-fetch cert (default) * 0=do neither 1=pre-populate url 2=pre-populate url + pre-fetch cert (default)
@ -786,7 +797,7 @@ user_pref("_user.js.parrot", "1400 syntax error: the parrot's bereft of life!");
user_pref("browser.display.use_document_fonts", 0); user_pref("browser.display.use_document_fonts", 0);
/* 1403: disable icon fonts (glyphs) and local fallback rendering /* 1403: disable icon fonts (glyphs) and local fallback rendering
* [1] https://bugzilla.mozilla.org/789788 * [1] https://bugzilla.mozilla.org/789788
* [2] https://trac.torproject.org/projects/tor/ticket/8455 ***/ * [2] https://gitlab.torproject.org/legacy/trac/-/issues/8455 ***/
// user_pref("gfx.downloadable_fonts.enabled", false); // [FF41+] // user_pref("gfx.downloadable_fonts.enabled", false); // [FF41+]
// user_pref("gfx.downloadable_fonts.fallback_delay", -1); // user_pref("gfx.downloadable_fonts.fallback_delay", -1);
/* 1404: disable rendering of SVG OpenType fonts /* 1404: disable rendering of SVG OpenType fonts
@ -798,7 +809,9 @@ user_pref("gfx.font_rendering.opentype_svg.enabled", false);
* [2] https://en.wikipedia.org/wiki/Graphite_(SIL) ***/ * [2] https://en.wikipedia.org/wiki/Graphite_(SIL) ***/
user_pref("gfx.font_rendering.graphite.enabled", false); user_pref("gfx.font_rendering.graphite.enabled", false);
/* 1409: limit system font exposure to a whitelist [FF52+] [RESTART] /* 1409: limit system font exposure to a whitelist [FF52+] [RESTART]
* If the whitelist is empty, then whitelisting is considered disabled and all fonts are allowed. * If the whitelist is empty, then whitelisting is considered disabled and all fonts are allowed
* [NOTE] in FF80 RFP restricts the whitelist to bundled and "Base Fonts"
* ...and in FF81+ the whitelist **overrides** RFP's font visibility (see 4618)
* [WARNING] Creating your own probably highly-unique whitelist will raise your entropy. * [WARNING] Creating your own probably highly-unique whitelist will raise your entropy.
* Eventually privacy.resistFingerprinting (see 4500) will cover this * Eventually privacy.resistFingerprinting (see 4500) will cover this
* [1] https://bugzilla.mozilla.org/1121643 ***/ * [1] https://bugzilla.mozilla.org/1121643 ***/
@ -881,8 +894,7 @@ user_pref("_user.js.parrot", "1800 syntax error: the parrot's pushing up daisies
/* 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
* [NOTE] You can still override individual sites via site permissions * [NOTE] You can still override individual sites via site permissions ***/
* [1] https://www.ghacks.net/2013/07/09/how-to-make-sure-that-a-firefox-plugin-never-activates-again/ ***/
user_pref("plugin.state.flash", 0); user_pref("plugin.state.flash", 0);
/* 1820: disable GMP (Gecko Media Plugins) /* 1820: disable GMP (Gecko Media Plugins)
* [1] https://wiki.mozilla.org/GeckoMediaPlugins ***/ * [1] https://wiki.mozilla.org/GeckoMediaPlugins ***/
@ -905,7 +917,7 @@ 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]) * 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,1452713 * [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
@ -938,28 +950,21 @@ user_pref("media.getusermedia.audiocapture.enabled", false);
* [NOTE] You can set exceptions under site permissions * [NOTE] You can set exceptions under site permissions
* [SETTING] Privacy & Security>Permissions>Autoplay>Settings>Default for all websites ***/ * [SETTING] Privacy & Security>Permissions>Autoplay>Settings>Default for all websites ***/
// user_pref("media.autoplay.default", 5); // 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 [FF78+]
user_pref("media.autoplay.enabled.user-gestures-needed", false); * 0=sticky (default), 1=transient, 2=user
* [NOTE] If you have trouble with some video sites, then add an exception (see 2030)
* [1] https://html.spec.whatwg.org/multipage/interaction.html#sticky-activation ***/
user_pref("media.autoplay.blocking_policy", 2);
/*** [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 ***/
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.menubar", true);
user_pref("dom.disable_window_open_feature.minimizable", true);
user_pref("dom.disable_window_open_feature.personalbar", true); // bookmarks toolbar
user_pref("dom.disable_window_open_feature.resizable", true); // [DEFAULT: true]
user_pref("dom.disable_window_open_feature.status", true); // [DEFAULT: true]
user_pref("dom.disable_window_open_feature.titlebar", true);
user_pref("dom.disable_window_open_feature.toolbar", true);
/* 2202: prevent scripts from moving and resizing open windows ***/ /* 2202: prevent scripts from moving and resizing open windows ***/
user_pref("dom.disable_window_move_resize", true); user_pref("dom.disable_window_move_resize", true);
/* 2203: open links targeting new windows in a new tab instead /* 2203: open links targeting new windows in a new tab instead
* This stops malicious window sizes and some screen resolution leaks. * This stops malicious window sizes and some screen resolution leaks.
* You can still right-click a link and open in a new window. * You can still right-click a link and open in a new window.
* [TEST] https://ghacksuserjs.github.io/TorZillaPrint/TorZillaPrint.html#screen * [TEST] https://ghacksuserjs.github.io/TorZillaPrint/TorZillaPrint.html#screen
* [1] https://trac.torproject.org/projects/tor/ticket/9881 ***/ * [1] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/9881 ***/
user_pref("browser.link.open_newwindow", 3); user_pref("browser.link.open_newwindow", 3);
user_pref("browser.link.open_newwindow.restriction", 0); user_pref("browser.link.open_newwindow.restriction", 0);
/* 2204: disable Fullscreen API (requires user interaction) to prevent screen-resolution leaks /* 2204: disable Fullscreen API (requires user interaction) to prevent screen-resolution leaks
@ -1033,9 +1038,8 @@ user_pref("_user.js.parrot", "2400 syntax error: the parrot's kicked the bucket!
* [NOTE] This will break some sites' functionality e.g. Outlook, Twitter, Facebook, Wordpress * [NOTE] This will break some sites' functionality e.g. Outlook, Twitter, Facebook, Wordpress
* This applies to onCut/onCopy/onPaste events - i.e. it requires interaction with the website * This applies to onCut/onCopy/onPaste events - i.e. it requires interaction with the website
* [WARNING] If both 'middlemouse.paste' and 'general.autoScroll' are true (at least one * [WARNING] If both 'middlemouse.paste' and 'general.autoScroll' are true (at least one
* is default false) then enabling this pref can leak clipboard content, see [2] * is default false) then enabling this pref can leak clipboard content, see [1]
* [1] https://www.ghacks.net/2014/01/08/block-websites-reading-modifying-clipboard-contents-firefox/ * [1] https://bugzilla.mozilla.org/1528289 */
* [2] https://bugzilla.mozilla.org/1528289 */
// user_pref("dom.event.clipboardevents.enabled", false); // user_pref("dom.event.clipboardevents.enabled", false);
/* 2404: disable clipboard commands (cut/copy) from "non-privileged" content [FF41+] /* 2404: disable clipboard commands (cut/copy) from "non-privileged" content [FF41+]
* this disables document.execCommand("cut"/"copy") to protect your clipboard * this disables document.execCommand("cut"/"copy") to protect your clipboard
@ -1075,7 +1079,7 @@ user_pref("javascript.options.wasm", false);
// user_pref("dom.IntersectionObserver.enabled", false); // user_pref("dom.IntersectionObserver.enabled", false);
/* 2429: enable (limited but sufficient) window.opener protection [FF65+] /* 2429: enable (limited but sufficient) window.opener protection [FF65+]
* Makes rel=noopener implicit for target=_blank in anchor and area elements when no rel attribute is set ***/ * Makes rel=noopener implicit for target=_blank in anchor and area elements when no rel attribute is set ***/
user_pref("dom.targetBlankNoOpener.enabled", true); user_pref("dom.targetBlankNoOpener.enabled", true); // [DEFAULT: true FF79+]
/*** [SECTION 2500]: HARDWARE FINGERPRINTING ***/ /*** [SECTION 2500]: HARDWARE FINGERPRINTING ***/
user_pref("_user.js.parrot", "2500 syntax error: the parrot's shuffled off 'is mortal coil!"); user_pref("_user.js.parrot", "2500 syntax error: the parrot's shuffled off 'is mortal coil!");
@ -1083,7 +1087,7 @@ user_pref("_user.js.parrot", "2500 syntax error: the parrot's shuffled off 'is m
* Initially a Linux issue (high precision readout) that was fixed. * Initially a Linux issue (high precision readout) that was fixed.
* However, it is still another metric for fingerprinting, used to raise entropy. * However, it is still another metric for fingerprinting, used to raise entropy.
* e.g. do you have a battery or not, current charging status, charge level, times remaining etc * e.g. do you have a battery or not, current charging status, charge level, times remaining etc
* [NOTE] From FF52+ Battery Status API is only available in chrome/privileged code. see [1] * [NOTE] From FF52+ Battery Status API is only available in chrome/privileged code, see [1]
* [1] https://bugzilla.mozilla.org/1313580 ***/ * [1] https://bugzilla.mozilla.org/1313580 ***/
// user_pref("dom.battery.enabled", false); // user_pref("dom.battery.enabled", false);
/* 2505: disable media device enumeration [FF29+] /* 2505: disable media device enumeration [FF29+]
@ -1131,10 +1135,6 @@ user_pref("browser.helperApps.deleteTempFileOnExit", true);
/* 2604: disable page thumbnail collection /* 2604: disable page thumbnail collection
* look in profile/thumbnails directory - you may want to clean that out ***/ * look in profile/thumbnails directory - you may want to clean that out ***/
user_pref("browser.pagethumbnails.capturing_disabled", true); // [HIDDEN PREF] user_pref("browser.pagethumbnails.capturing_disabled", true); // [HIDDEN PREF]
/* 2605: block web content in file processes [FF55+]
* [SETUP-WEB] You may want to disable this for corporate or developer environments
* [1] https://bugzilla.mozilla.org/1343184 ***/
user_pref("browser.tabs.remote.allowLinkedWebInFileUriProcess", false); // [DEFAULT: false FF76+]
/* 2606: disable UITour backend so there is no chance that a remote page can use it ***/ /* 2606: disable UITour backend so there is no chance that a remote page can use it ***/
user_pref("browser.uitour.enabled", false); user_pref("browser.uitour.enabled", false);
user_pref("browser.uitour.url", ""); user_pref("browser.uitour.url", "");
@ -1143,8 +1143,8 @@ user_pref("browser.uitour.url", "");
* [1] https://github.com/pyllyukko/user.js/issues/179#issuecomment-246468676 ***/ * [1] https://github.com/pyllyukko/user.js/issues/179#issuecomment-246468676 ***/
user_pref("devtools.chrome.enabled", false); user_pref("devtools.chrome.enabled", false);
/* 2608: disable remote debugging /* 2608: disable remote debugging
* [1] https://trac.torproject.org/projects/tor/ticket/16222 ***/ * [1] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/16222 ***/
user_pref("devtools.debugger.remote-enabled", false); user_pref("devtools.debugger.remote-enabled", false); // [DEFAULT: false]
/* 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 ***/
@ -1155,7 +1155,7 @@ user_pref("devtools.debugger.remote-enabled", false);
* [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://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/10089 ***/
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)
@ -1190,8 +1190,7 @@ user_pref("network.IDN_show_punycode", true);
* CAVEAT: JS can still force a pdf to open in-browser by bundling its own code (rare) * CAVEAT: JS can still force a pdf to open in-browser by bundling its own code (rare)
* [SETTING] General>Applications>Portable Document Format (PDF) ***/ * [SETTING] General>Applications>Portable Document Format (PDF) ***/
user_pref("pdfjs.disabled", false); // [DEFAULT: false] user_pref("pdfjs.disabled", false); // [DEFAULT: false]
/* 2621: disable links launching Windows Store on Windows 8/8.1/10 [WINDOWS] /* 2621: disable links launching Windows Store on Windows 8/8.1/10 [WINDOWS] ***/
* [1] https://www.ghacks.net/2016/03/25/block-firefox-chrome-windows-store/ ***/
user_pref("network.protocol-handler.external.ms-windows-store", false); user_pref("network.protocol-handler.external.ms-windows-store", false);
/* 2622: enforce no system colors; they can be fingerprinted /* 2622: enforce no system colors; they can be fingerprinted
* [SETTING] General>Language and Appearance>Fonts and Colors>Colors>Use system colors ***/ * [SETTING] General>Language and Appearance>Fonts and Colors>Colors>Use system colors ***/
@ -1355,6 +1354,7 @@ user_pref("privacy.cpd.siteSettings", false); // Site Preferences
user_pref("privacy.sanitize.timeSpan", 0); user_pref("privacy.sanitize.timeSpan", 0);
/*** [SECTION 4000]: FPI (FIRST PARTY ISOLATION) /*** [SECTION 4000]: FPI (FIRST PARTY ISOLATION)
4001: FPI
** 1278037 - isolate indexedDB (FF51+) ** 1278037 - isolate indexedDB (FF51+)
** 1277803 - isolate favicons (FF52+) ** 1277803 - isolate favicons (FF52+)
** 1264562 - isolate OCSP cache (FF52+) ** 1264562 - isolate OCSP cache (FF52+)
@ -1373,22 +1373,29 @@ user_pref("privacy.sanitize.timeSpan", 0);
** 1506693 - isolate pdfjs range-based requests (FF68+) ** 1506693 - isolate pdfjs range-based requests (FF68+)
** 1330467 - isolate site permissions (FF69+) ** 1330467 - isolate site permissions (FF69+)
** 1534339 - isolate IPv6 (FF73+) ** 1534339 - isolate IPv6 (FF73+)
4003: NETWORK PARTITON
** 1647732 - isolate font cache (FF80+)
** 1649673 - isolate speculative connections (FF80+)
***/ ***/
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+]
* [SETUP-WEB] May break cross-domain logins and site functionality until perfected * [SETUP-WEB] May break cross-domain logins and site functionality until perfected
* [1] https://bugzilla.mozilla.org/1260931 ***/ * [1] https://bugzilla.mozilla.org/1260931
* [2] https://bugzilla.mozilla.org/1299996 [META] ***/
user_pref("privacy.firstparty.isolate", true); user_pref("privacy.firstparty.isolate", true);
/* 4002: enforce FPI restriction for window.opener [FF54+] /* 4002: enforce FPI restriction for window.opener [FF54+]
* [NOTE] Setting this to false may reduce the breakage in 4001 * [NOTE] Setting this to false may reduce the breakage in 4001
* FF65+ blocks postMessage with targetOrigin "*" if originAttributes don't match. But * FF65+ blocks postMessage with targetOrigin "*" if originAttributes don't match. But
* to reduce breakage it ignores the 1st-party domain (FPD) originAttribute. (see [2],[3]) * to reduce breakage it ignores the 1st-party domain (FPD) originAttribute, see [2],[3]
* The 2nd pref removes that limitation and will only allow communication if FPDs also match. * The 2nd pref removes that limitation and will only allow communication if FPDs also match.
* [1] https://bugzilla.mozilla.org/1319773#c22 * [1] https://bugzilla.mozilla.org/1319773#c22
* [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 ESR] // user_pref("privacy.firstparty.isolate.block_post_message", true); // [HIDDEN PREF ESR]
/* 4003: enable site partitioning (FF78+)
* [1] https://bugzilla.mozilla.org/1590107 [META] */
user_pref("privacy.partition.network_state", true);
/*** [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
@ -1445,17 +1452,18 @@ user_pref("privacy.firstparty.isolate", true);
FF60: Fix keydown/keyup events (1438795) FF60: Fix keydown/keyup events (1438795)
** 1337157 - disable WebGL debug renderer info (see 4613) (FF60+) ** 1337157 - disable WebGL debug renderer info (see 4613) (FF60+)
** 1459089 - disable OS locale in HTTP Accept-Language headers (ANDROID) (FF62+) ** 1459089 - disable OS locale in HTTP Accept-Language headers (ANDROID) (FF62+)
** 1479239 - return "no-preference" with prefers-reduced-motion (FF63+) ** 1479239 - return "no-preference" with prefers-reduced-motion (see 4614) (FF63+)
** 1363508 - spoof/suppress Pointer Events (see 4614) (FF64+) ** 1363508 - spoof/suppress Pointer Events (see 4615) (FF64+)
FF65: pointerEvent.pointerid (1492766) FF65: pointerEvent.pointerid (1492766)
** 1485266 - disable exposure of system colors to CSS or canvas (see 4615) (FF67+) ** 1485266 - disable exposure of system colors to CSS or canvas (see 4616) (FF67+)
** 1407366 - enable inner window letterboxing (see 4504) (FF67+) ** 1407366 - enable inner window letterboxing (see 4504) (FF67+)
** 1494034 - return "light" with prefers-color-scheme (see 4616) (FF67+) ** 1494034 - return "light" with prefers-color-scheme (see 4617) (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+) ** 1595823 - spoof audioContext sampleRate (FF72+)
** 1607316 - spoof pointer as coarse and hover as none (ANDROID) (FF74+) ** 1607316 - spoof pointer as coarse and hover as none (ANDROID) (FF74+)
** 1621433 - randomize canvas (previously FF58+ returned an all-white canvas) (FF78+) ** 1621433 - randomize canvas (previously FF58+ returned an all-white canvas) (FF78+)
** 1653987 - limit font visibility to bundled and "Base Fonts" (see 4618) (non-ANDROID) (FF80+)
***/ ***/
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+]
@ -1490,6 +1498,9 @@ user_pref("privacy.resistFingerprinting.letterboxing", true); // [HIDDEN PREF]
* When default true (FF62+) this no longer masks the RFP chrome resizing activity * When default true (FF62+) this no longer masks the RFP chrome resizing activity
* [1] https://bugzilla.mozilla.org/1448423 ***/ * [1] https://bugzilla.mozilla.org/1448423 ***/
user_pref("browser.startup.blankWindow", false); user_pref("browser.startup.blankWindow", false);
/* 4520: disable chrome animations [FF77+] [RESTART]
* [NOTE] pref added in FF63, but applied to chrome in FF77. RFP spoofs this for web content ***/
user_pref("ui.prefersReducedMotion", 1); // [HIDDEN PREF]
/*** [SECTION 4600]: RFP ALTERNATIVES /*** [SECTION 4600]: RFP ALTERNATIVES
* non-RFP users: * non-RFP users:
@ -1508,8 +1519,8 @@ user_pref("_user.js.parrot", "4600 syntax error: the parrot's crossed the Jordan
// 4601: [2514] spoof (or limit?) number of CPU cores [FF48+] // 4601: [2514] spoof (or limit?) number of CPU cores [FF48+]
// [NOTE] *may* affect core chrome/Firefox performance, will affect content. // [NOTE] *may* affect core chrome/Firefox performance, will affect content.
// [1] https://bugzilla.mozilla.org/1008453 // [1] https://bugzilla.mozilla.org/1008453
// [2] https://trac.torproject.org/projects/tor/ticket/21675 // [2] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/21675
// [3] https://trac.torproject.org/projects/tor/ticket/22127 // [3] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/22127
// [4] https://html.spec.whatwg.org/multipage/workers.html#navigator.hardwareconcurrency // [4] https://html.spec.whatwg.org/multipage/workers.html#navigator.hardwareconcurrency
// user_pref("dom.maxHardwareConcurrency", 2); // user_pref("dom.maxHardwareConcurrency", 2);
// * * * / // * * * /
@ -1521,7 +1532,7 @@ user_pref("dom.enable_resource_timing", false);
user_pref("dom.enable_performance", false); user_pref("dom.enable_performance", false);
// 4604: [2512] disable device sensor API // 4604: [2512] disable device sensor API
// Optional protection depending on your device // Optional protection depending on your device
// [1] https://trac.torproject.org/projects/tor/ticket/15758 // [1] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/15758
// [2] https://blog.lukaszolejnik.com/stealing-sensitive-browser-data-with-the-w3c-ambient-light-sensor-api/ // [2] https://blog.lukaszolejnik.com/stealing-sensitive-browser-data-with-the-w3c-ambient-light-sensor-api/
// [3] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1357733,1292751 // [3] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1357733,1292751
// user_pref("device.sensors.enabled", false); // user_pref("device.sensors.enabled", false);
@ -1532,7 +1543,7 @@ user_pref("dom.enable_performance", false);
user_pref("browser.zoom.siteSpecific", false); user_pref("browser.zoom.siteSpecific", false);
// 4606: [2501] disable gamepad API - USB device ID enumeration // 4606: [2501] disable gamepad API - USB device ID enumeration
// Optional protection depending on your connected devices // Optional protection depending on your connected devices
// [1] https://trac.torproject.org/projects/tor/ticket/13023 // [1] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/13023
// user_pref("dom.gamepad.enabled", false); // user_pref("dom.gamepad.enabled", false);
// 4607: [2503] disable giving away network info [FF31+] // 4607: [2503] disable giving away network info [FF31+]
// e.g. bluetooth, cellular, ethernet, wifi, wimax, other, mixed, unknown, none // e.g. bluetooth, cellular, ethernet, wifi, wimax, other, mixed, unknown, none
@ -1548,7 +1559,7 @@ user_pref("media.webspeech.synth.enabled", false);
// * * * / // * * * /
// FF57+ // FF57+
// 4610: [2506] disable video statistics - JS performance fingerprinting [FF25+] // 4610: [2506] disable video statistics - JS performance fingerprinting [FF25+]
// [1] https://trac.torproject.org/projects/tor/ticket/15757 // [1] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/15757
// [2] https://bugzilla.mozilla.org/654550 // [2] https://bugzilla.mozilla.org/654550
user_pref("media.video_stats.enabled", false); user_pref("media.video_stats.enabled", false);
// 4611: [2509] disable touch events // 4611: [2509] disable touch events
@ -1556,7 +1567,7 @@ user_pref("media.video_stats.enabled", false);
// 0=disabled, 1=enabled, 2=autodetect // 0=disabled, 1=enabled, 2=autodetect
// Optional protection depending on your device // Optional protection depending on your device
// [1] https://developer.mozilla.org/docs/Web/API/Touch_events // [1] https://developer.mozilla.org/docs/Web/API/Touch_events
// [2] https://trac.torproject.org/projects/tor/ticket/10286 // [2] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/10286
// user_pref("dom.w3c_touch_events.enabled", 0); // user_pref("dom.w3c_touch_events.enabled", 0);
// * * * / // * * * /
// FF59+ // FF59+
@ -1571,20 +1582,31 @@ user_pref("media.ondevicechange.enabled", false);
// [2] https://developer.mozilla.org/docs/Web/API/WEBGL_debug_renderer_info // [2] https://developer.mozilla.org/docs/Web/API/WEBGL_debug_renderer_info
user_pref("webgl.enable-debug-renderer-info", false); user_pref("webgl.enable-debug-renderer-info", false);
// * * * / // * * * /
// FF65+ // FF63+
// 4614: [2516] disable PointerEvents // 4614: enforce prefers-reduced-motion as no-preference [FF63+] [RESTART]
// 0=no-preference, 1=reduce
user_pref("ui.prefersReducedMotion", 0); // [HIDDEN PREF]
// FF64+
// 4615: [2516] disable PointerEvents
// [1] https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent // [1] https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent
user_pref("dom.w3c_pointer_events.enabled", false); user_pref("dom.w3c_pointer_events.enabled", false);
// * * * / // * * * /
// FF67+ // FF67+
// 4615: [2618] disable exposure of system colors to CSS or canvas [FF44+] // 4616: [2618] disable exposure of system colors to CSS or canvas [FF44+]
// [NOTE] See second listed bug: may cause black on black for elements with undefined colors // [NOTE] See second listed bug: may cause black on black for elements with undefined colors
// [SETUP-CHROME] Might affect CSS in themes and extensions // [SETUP-CHROME] Might affect CSS in themes and extensions
// [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=232227,1330876 // [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=232227,1330876
user_pref("ui.use_standins_for_native_colors", true); user_pref("ui.use_standins_for_native_colors", true);
// 4616: enforce prefers-color-scheme as light [FF67+] // 4617: enforce prefers-color-scheme as light [FF67+]
// 0=light, 1=dark : This overrides your OS value // 0=light, 1=dark : This overrides your OS value
user_pref("ui.systemUsesDarkTheme", 0); // [HIDDEN PREF] user_pref("ui.systemUsesDarkTheme", 0); // [HIDDEN PREF]
// FF80+
// 4618: limit font visbility (non-ANDROID) [FF79+]
// Uses hardcoded lists with two parts: kBaseFonts + kLangPackFonts, see [1]
// 1=only base system fonts, 2=also fonts from optional language packs, 3=also user-installed fonts
// [NOTE] Bundled fonts are auto-allowed
// [1] https://searchfox.org/mozilla-central/search?path=StandardFonts*.inc
user_pref("layout.css.font-visibility.level", 1);
// * * * / // * * * /
// ***/ // ***/
@ -1593,8 +1615,8 @@ user_pref("ui.systemUsesDarkTheme", 0); // [HIDDEN PREF]
to use RFP (4500) or an extension, in which case they become POINTLESS. to use RFP (4500) or an extension, in which case they become POINTLESS.
(a) Many of the components that make up your UA can be derived by other means. (a) Many of the components that make up your UA can be derived by other means.
And when those values differ, you provide more bits and raise entropy. And when those values differ, you provide more bits and raise entropy.
Examples of leaks include navigator objects, date locale/formats, iframes, Examples of leaks include workers, navigator objects, date locale/formats,
headers, tcp/ip attributes, feature detection, and **many** more. iframes, headers, tcp/ip attributes, feature detection, and **many** more.
ALL values below intentionally left blank - use RFP, or get a vetted, tested ALL values below intentionally left blank - use RFP, or get a vetted, tested
extension and mimic RFP values to *lower* entropy, or randomize to *raise* it extension and mimic RFP values to *lower* entropy, or randomize to *raise* it
***/ ***/
@ -1631,7 +1653,6 @@ user_pref("_user.js.parrot", "5000 syntax error: this is an ex-parrot!");
// user_pref("full-screen-api.warning.timeout", 0); // user_pref("full-screen-api.warning.timeout", 0);
/* APPEARANCE ***/ /* APPEARANCE ***/
// user_pref("browser.download.autohideButton", false); // [FF57+] // user_pref("browser.download.autohideButton", false); // [FF57+]
// user_pref("toolkit.cosmeticAnimations.enabled", false); // [FF55+]
// user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); // [FF68+] allow userChrome/userContent // user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); // [FF68+] allow userChrome/userContent
/* CONTENT BEHAVIOR ***/ /* CONTENT BEHAVIOR ***/
// user_pref("accessibility.typeaheadfind", true); // enable "Find As You Type" // user_pref("accessibility.typeaheadfind", true); // enable "Find As You Type"
@ -1665,6 +1686,20 @@ 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!");
/* ESR78.x still uses all the following prefs
// [NOTE] replace the * with a slash in the line above to re-enable them
// FF79
// 0212: enforce fallback text encoding to match en-US
// When the content or server doesn't declare a charset the browser will
// fallback to the "Current locale" based on your application language
// [SETTING] General>Language and Appearance>Fonts and Colors>Advanced>Text Encoding for Legacy Content (FF72-)
// [TEST] https://hsivonen.com/test/moz/check-charset.htm
// [1] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/20025
// [-] https://bugzilla.mozilla.org/1603712
user_pref("intl.charset.fallback.override", "windows-1252");
// * * * /
// ***/
/* ESR68.x still uses all the following prefs /* ESR68.x still uses all the following prefs
// [NOTE] replace the * with a slash in the line above to re-enable them // [NOTE] replace the * with a slash in the line above to re-enable them
// FF69 // FF69
@ -1727,6 +1762,35 @@ user_pref("webgl.disable-extensions", true);
// [2] https://trac.torproject.org/projects/tor/ticket/16931 // [2] https://trac.torproject.org/projects/tor/ticket/16931
// [-] https://bugzilla.mozilla.org/1618188 // [-] https://bugzilla.mozilla.org/1618188
user_pref("extensions.blocklist.url", "https://blocklists.settings.services.mozilla.com/v1/blocklist/3/%APP_ID%/%APP_VERSION%/"); user_pref("extensions.blocklist.url", "https://blocklists.settings.services.mozilla.com/v1/blocklist/3/%APP_ID%/%APP_VERSION%/");
// 2201: prevent websites from disabling new window features
// [-] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1507375,1660524
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.menubar", true);
user_pref("dom.disable_window_open_feature.minimizable", true);
user_pref("dom.disable_window_open_feature.personalbar", true); // bookmarks toolbar
user_pref("dom.disable_window_open_feature.resizable", true); // [DEFAULT: true]
user_pref("dom.disable_window_open_feature.status", true); // [DEFAULT: true]
user_pref("dom.disable_window_open_feature.titlebar", true);
user_pref("dom.disable_window_open_feature.toolbar", true);
// * * * /
// FF77
// 0850e: disable location bar one-off searches [FF51+]
// [-] https://bugzilla.mozilla.org/1628926
// user_pref("browser.urlbar.oneOffSearches", false);
// 2605: block web content in file processes [FF55+]
// [SETUP-WEB] You may want to disable this for corporate or developer environments
// [1] https://bugzilla.mozilla.org/1343184
// [-] https://bugzilla.mozilla.org/1603007
user_pref("browser.tabs.remote.allowLinkedWebInFileUriProcess", false);
// * * * /
// FF78
// 2031: disable autoplay of HTML5 media if you interacted with the site [FF66+] - replaced by 'media.autoplay.blocking_policy'
// [-] https://bugzilla.mozilla.org/1509933
user_pref("media.autoplay.enabled.user-gestures-needed", false);
// 5000's: disable chrome animations - replaced FF77+ by 'ui.prefersReducedMotion' (4520)
// [-] https://bugzilla.mozilla.org/1640501
// user_pref("toolkit.cosmeticAnimations.enabled", false); // [FF55+]
// * * * / // * * * /
// ***/ // ***/