Firefox

Firefox Preferences

Overview

Firefox stores user preferences in prefs.js, a JavaScript file within each profile directory that contains user_pref() function calls. An optional user.js file can override preferences on every browser startup. These files control nearly every aspect of Firefox behaviour: privacy settings, security policies, network configuration, search engine defaults, UI customisation, and content blocking.

Preferences are forensically relevant because they reveal the user's security posture, privacy choices, network configuration (including proxy settings), and whether anti-forensic measures have been applied (such as disabling history, clearing data on exit, or disabling telemetry).

File Locations

FilePathDescription
User preferences~/Library/Application Support/Firefox/Profiles/{profile}/prefs.jsActive preference store (auto-generated)
User overrides~/Library/Application Support/Firefox/Profiles/{profile}/user.jsManual preference overrides (optional, user-created)

prefs.js vs user.js

Aspectprefs.jsuser.js
Created byFirefox automaticallyUser manually
Updated byFirefox on preference changesUser edits only
Applied whenAlways loaded on startupApplied after prefs.js, overrides values
Reset on startupNo -- persists user changesYes -- reapplied every startup
Forensic significanceCurrent state of all modified preferencesDeliberate, persistent configuration choices

The presence of a user.js file is notable because it indicates intentional configuration hardening. Files like those generated by arkenfox/user.js (formerly ghacks-user.js) dramatically alter Firefox's privacy and security behaviour.

File Format

Both files use the same JavaScript format:

// prefs.js example
user_pref("browser.startup.homepage", "https://example.com");
user_pref("browser.startup.page", 3);
user_pref("privacy.donottrackheader.enabled", true);
user_pref("network.proxy.type", 1);
user_pref("network.proxy.http", "proxy.corp.example.com");
user_pref("network.proxy.http_port", 8080);

Each line is a user_pref("key", value) call where:

  • The key is a dot-separated preference path.
  • The value is a JavaScript literal: string, integer, or boolean.

Comments beginning with // or /* */ may be present but are stripped by Firefox on write.

Key Fields for Analysis

Privacy and Anti-Forensics Settings

PreferenceDefaultForensic Significance
privacy.sanitize.sanitizeOnShutdownfalseIf true, data is cleared on exit
privacy.clearOnShutdown.historyfalseHistory cleared on shutdown
privacy.clearOnShutdown.cookiesfalseCookies cleared on shutdown
privacy.clearOnShutdown.cachefalseCache cleared on shutdown
privacy.clearOnShutdown.formdatafalseForm history cleared on shutdown
privacy.clearOnShutdown.sessionsfalseSession data cleared on shutdown
privacy.clearOnShutdown.downloadsfalseDownload history cleared on shutdown
places.history.enabledtrueIf false, browsing history is disabled entirely
browser.formfill.enabletrueIf false, form autofill is disabled
signon.rememberSignonstrueIf false, password saving is disabled
privacy.donottrackheader.enabledfalseSends Do Not Track header
browser.privatebrowsing.autostartfalseIf true, always starts in private browsing

Network and Proxy Settings

PreferenceDescription
network.proxy.type0=direct, 1=manual, 2=PAC, 4=WPAD, 5=system
network.proxy.httpHTTP proxy hostname
network.proxy.http_portHTTP proxy port
network.proxy.sslHTTPS proxy hostname
network.proxy.ssl_portHTTPS proxy port
network.proxy.socksSOCKS proxy hostname
network.proxy.socks_portSOCKS proxy port
network.proxy.socks_versionSOCKS version (4 or 5)
network.proxy.autoconfig_urlPAC (Proxy Auto-Config) URL
network.proxy.no_proxies_onProxy bypass list
network.trr.modeDNS over HTTPS mode (0=off, 2=first, 3=only, 5=off-by-choice)
network.trr.uriDNS over HTTPS resolver URL

Security Settings

PreferenceDescription
security.tls.version.minMinimum TLS version (1=1.0, 2=1.1, 3=1.2, 4=1.3)
security.tls.version.maxMaximum TLS version
security.OCSP.enabledCertificate revocation checking (0=off, 1=on, 2=strict)
security.cert_pinning.enforcement_levelCertificate pinning enforcement
dom.security.https_only_modeHTTPS-Only mode enabled
security.sandbox.content.levelContent process sandbox level

Content and Tracking Protection

PreferenceDescription
browser.contentblocking.categorystandard, strict, or custom
privacy.trackingprotection.enabledEnhanced Tracking Protection for normal windows
privacy.trackingprotection.socialtracking.enabledSocial media tracker blocking
privacy.trackingprotection.cryptomining.enabledCryptominer blocking
privacy.trackingprotection.fingerprinting.enabledFingerprinting protection
privacy.resistFingerprintingAdvanced fingerprinting resistance (reduces uniqueness)

Search and Homepage

PreferenceDescription
browser.startup.homepageHomepage URL(s)
browser.startup.pageStartup behaviour: 0=blank, 1=homepage, 3=restore session
browser.search.defaultenginenameDefault search engine name
keyword.URLAddress bar search URL

Telemetry and Reporting

PreferenceDescription
datareporting.healthreport.uploadEnabledTelemetry data upload
toolkit.telemetry.enabledTelemetry collection
app.shield.optoutstudies.enabledMozilla Shield studies participation
browser.crashReports.unsubmittedCheck.autoSubmit2Auto-submit crash reports

Timestamps

prefs.js does not contain timestamps within its content. However, the file's filesystem modification time reflects when preferences were last changed. The macfor collector records OriginalModTime from the file metadata.

Analysis Notes

Detecting Anti-Forensic Configuration

A user who has enabled privacy.sanitize.sanitizeOnShutdown with associated privacy.clearOnShutdown.* flags set to true is actively destroying forensic evidence on browser close. Check:

  1. Is privacy.sanitize.sanitizeOnShutdown true?
  2. Which privacy.clearOnShutdown.* categories are enabled?
  3. Is browser.privatebrowsing.autostart true? (Permanent private browsing)
  4. Is places.history.enabled false? (History completely disabled)

Identifying Privacy Hardening Tools

The presence of extensive privacy-related overrides, especially in a user.js file, often indicates use of a hardening template:

  • arkenfox/user.js: Comprehensive privacy hardening. Look for characteristic preferences like privacy.resistFingerprinting = true, extensive network.cookie.* modifications, and geo.enabled = false.
  • LibreWolf defaults: Similar to arkenfox but applied via default preferences.
  • Tor Browser settings: Extreme privacy configuration (unlikely in standard Firefox).

Proxy and Network Analysis

Proxy settings reveal network routing:

  • Manual proxy (network.proxy.type = 1): Check network.proxy.http and network.proxy.socks for the proxy endpoint.
  • PAC file (network.proxy.type = 2): The network.proxy.autoconfig_url may point to an enterprise PAC file.
  • SOCKS proxy with DNS via SOCKS (network.proxy.socks_remote_dns = true): May indicate Tor or SSH tunnel usage.
  • DNS over HTTPS (network.trr.mode = 2 or 3): DNS queries are encrypted, bypassing local DNS monitoring.

Session Restore Behaviour

The browser.startup.page preference determines what happens on startup:

ValueBehaviour
0Blank page
1Homepage
3Restore previous session

A value of 3 means the session files in sessionstore-backups/ will be loaded on startup, and session cookies will persist across browser restarts.

Parsing prefs.js

prefs.js is parseable with a simple regex or line-by-line extraction:

Pattern: user_pref\("([^"]+)",\s*(.+)\);
Group 1: preference key
Group 2: preference value (string, integer, or boolean)

Note: The macfor collector currently collects prefs.js as a raw file without structured parsing. Examiners can parse the file manually or with scripting tools.

Version Differences

VersionChange
Firefox 70+browser.contentblocking.category replaces older tracking protection prefs
Firefox 83+HTTPS-Only mode available via dom.security.https_only_mode
Firefox 85+Network partitioning preferences added
Firefox 86+Total Cookie Protection preferences
Firefox 91+HTTPS-Only mode refinements
Firefox 114+DNS over HTTPS preferences expanded

The prefs.js format itself has been unchanged for decades. New preferences are added with each Firefox release, but the syntax remains the same.

Tool Support

ToolCapability
macforRaw prefs.js file collection (Pro module)
Text editorDirect inspection -- prefs.js is human-readable
grep/awkPattern-based extraction of specific preferences
Firefox about:configLive preference inspection (on running Firefox)
AXIOMAutomated Firefox preference extraction

References

Previous
Sessions