--- a/Source/WebCore/page/NavigatorBase.cpp
+++ b/Source/WebCore/page/NavigatorBase.cpp
@@ -73,6 +73,16 @@
 
 namespace WebCore {
 
+// Fingerprint protection: check env var once
+static bool fingerprintProtectionEnabled()
+{
+    static const bool enabled = [] {
+        const char* v = getenv("WPE_FINGERPRINT_PROTECTION");
+        return v && *v && *v != '0';
+    }();
+    return enabled;
+}
+
 WTF_MAKE_TZONE_ALLOCATED_IMPL(NavigatorBase);
 
 NavigatorBase::NavigatorBase(ScriptExecutionContext* context)
@@ -84,12 +94,13 @@
 
 String NavigatorBase::appName()
 {
+    if (fingerprintProtectionEnabled()) return emptyString();
     return "Netscape"_s;
 }
 
 String NavigatorBase::appVersion() const
 {
-    // Version is everything in the user agent string past the "Mozilla/" prefix.
+    if (fingerprintProtectionEnabled()) return emptyString();
     const String& agent = userAgent();
     return agent.substring(agent.find('/') + 1);
 }
@@ -117,37 +128,43 @@
 
 String NavigatorBase::appCodeName()
 {
+    if (fingerprintProtectionEnabled()) return emptyString();
     return "Mozilla"_s;
 }
 
 String NavigatorBase::product()
 {
+    if (fingerprintProtectionEnabled()) return emptyString();
     return WEBCORE_NAVIGATOR_PRODUCT;
 }
 
 String NavigatorBase::productSub()
 {
+    if (fingerprintProtectionEnabled()) return emptyString();
     return WEBCORE_NAVIGATOR_PRODUCT_SUB;
 }
 
 String NavigatorBase::vendor()
 {
+    if (fingerprintProtectionEnabled()) return emptyString();
     return WEBCORE_NAVIGATOR_VENDOR;
 }
 
 String NavigatorBase::vendorSub()
 {
+    if (fingerprintProtectionEnabled()) return emptyString();
     return WEBCORE_NAVIGATOR_VENDOR_SUB;
 }
 
 String NavigatorBase::language()
 {
+    if (fingerprintProtectionEnabled()) return "en-US"_s;
     return defaultLanguage();
 }
 
 Vector<String> NavigatorBase::languages()
 {
-    // We intentionally expose only the primary language for privacy reasons.
+    if (fingerprintProtectionEnabled()) return { "en-US"_s };
     return { defaultLanguage() };
 }
 
@@ -184,16 +201,11 @@
 
 int NavigatorBase::hardwareConcurrency(ScriptExecutionContext& context)
 {
+    if (fingerprintProtectionEnabled()) return 0;
     if (context.requiresScriptTrackingPrivacyProtection(ScriptTrackingPrivacyCategory::HardwareConcurrency)) {
         auto randomSeed = static_cast<unsigned>(context.noiseInjectionHashSalt().value_or(0));
         return 1 + WeakRandom { randomSeed }.getUint32(63);
     }
-
-    // Enforce a maximum for the number of cores reported to mitigate
-    // fingerprinting for the minority of machines with large numbers of cores.
-    // If machines with more than 8 cores become commonplace, we should bump this number.
-    // see https://bugs.webkit.org/show_bug.cgi?id=132588 for the
-    // rationale behind this decision.
     static int numberOfCores = WTF::numberOfProcessorCores() < 8 ? 4 : 8;
     return numberOfCores;
 }
--- a/Source/WebCore/platform/glib/UserAgentGLib.cpp
+++ b/Source/WebCore/platform/glib/UserAgentGLib.cpp
@@ -78,6 +78,16 @@
 
 static String buildUserAgentString(const UserAgentQuirks& quirks)
 {
+    // Fingerprint protection: return clean minimal UA
+    static const bool fpEnabled = [] {
+        const char* v = getenv("WPE_FINGERPRINT_PROTECTION");
+        return v && *v && *v != '0';
+    }();
+    if (fpEnabled) {
+        (void)quirks;
+        return "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/60.5 Safari/605.1.15"_s;
+    }
+
     StringBuilder uaString;
     uaString.append("Mozilla/5.0 ("_s);
 
--- a/Source/WebCore/platform/network/soup/SoupNetworkSession.cpp
+++ b/Source/WebCore/platform/network/soup/SoupNetworkSession.cpp
@@ -308,6 +308,14 @@
 
 void SoupNetworkSession::setAcceptLanguages(const CString& languages)
 {
+    static const bool fpEnabled = [] {
+        const char* v = getenv("WPE_FINGERPRINT_PROTECTION");
+        return v && *v && *v != '0';
+    }();
+    if (fpEnabled) {
+        soup_session_set_accept_language(m_soupSession.get(), "en-US");
+        return;
+    }
     soup_session_set_accept_language(m_soupSession.get(), languages.data());
 }
 
