morgan pushed to branch tor-browser-115.16.0esr-13.5-1 at The Tor Project / Applications / Tor Browser
Commits:
-
8ae4a172
by Pier Angelo Vendrame at 2024-10-16T22:24:59+00:00
-
39263a40
by Morgan at 2024-10-16T22:25:12+00:00
3 changed files:
- browser/app/profile/000-tor-browser.js
- netwerk/protocol/http/nsHttpHandler.cpp
- toolkit/components/resistfingerprinting/nsRFPService.cpp
Changes:
... | ... | @@ -52,6 +52,8 @@ pref("network.http.connection-retry-timeout", 0); |
52 | 52 | // be reduced to the strictly required time).
|
53 | 53 | pref("extensions.torbutton.use_nontor_proxy", false);
|
54 | 54 | |
55 | +// tor-browser#42647: Make OS HTTP User-Agent OS spoofing configurable by pref
|
|
56 | +pref("privacy.resistFingerprinting.spoofOsInUserAgentHeader", true);
|
|
55 | 57 | // Browser home page:
|
56 | 58 | pref("browser.startup.homepage", "about:tor");
|
57 | 59 |
... | ... | @@ -497,6 +497,9 @@ nsresult nsHttpHandler::Init() { |
497 | 497 | // obsService->AddObserver(this, "net:failed-to-process-uri-content", true);
|
498 | 498 | }
|
499 | 499 | |
500 | + Preferences::AddWeakObserver(
|
|
501 | + this, "privacy.resistFingerprinting.spoofOsInUserAgentHeader"_ns);
|
|
502 | + |
|
500 | 503 | MakeNewRequestTokenBucket();
|
501 | 504 | mWifiTickler = new Tickler();
|
502 | 505 | if (NS_FAILED(mWifiTickler->Init())) mWifiTickler = nullptr;
|
... | ... | @@ -2064,6 +2067,9 @@ nsHttpHandler::Observe(nsISupports* subject, const char* topic, |
2064 | 2067 | // Inform nsIOService that network is tearing down.
|
2065 | 2068 | gIOService->SetHttpHandlerAlreadyShutingDown();
|
2066 | 2069 | |
2070 | + Preferences::RemoveObserver(
|
|
2071 | + this, "privacy.resistFingerprinting.spoofOsInUserAgentHeader"_ns);
|
|
2072 | + |
|
2067 | 2073 | ShutdownConnectionManager();
|
2068 | 2074 | |
2069 | 2075 | // need to reset the session start time since cache validation may
|
... | ... | @@ -2189,6 +2195,11 @@ nsHttpHandler::Observe(nsISupports* subject, const char* topic, |
2189 | 2195 | ShutdownConnectionManager();
|
2190 | 2196 | mConnMgr = nullptr;
|
2191 | 2197 | Unused << InitConnectionMgr();
|
2198 | + } else if (!strcmp(topic, "nsPref:changed") &&
|
|
2199 | + !NS_strcmp(
|
|
2200 | + data,
|
|
2201 | + u"privacy.resistFingerprinting.spoofOsInUserAgentHeader")) {
|
|
2202 | + nsRFPService::GetSpoofedUserAgent(mSpoofedUserAgent, true);
|
|
2192 | 2203 | }
|
2193 | 2204 | |
2194 | 2205 | return NS_OK;
|
... | ... | @@ -939,12 +939,17 @@ void nsRFPService::GetSpoofedUserAgent(nsACString& userAgent, |
939 | 939 | // https://developer.mozilla.org/en-US/docs/Web/API/NavigatorID/userAgent
|
940 | 940 | // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent
|
941 | 941 | |
942 | + const bool spoofOs =
|
|
943 | + isForHTTPHeader &&
|
|
944 | + Preferences::GetBool(
|
|
945 | + "privacy.resistFingerprinting.spoofOsInUserAgentHeader", true);
|
|
946 | + |
|
942 | 947 | // These magic numbers are the lengths of the UA string literals below.
|
943 | 948 | // Assume three-digit Firefox version numbers so we have room to grow.
|
944 | 949 | size_t preallocatedLength =
|
945 | 950 | 13 +
|
946 | - (isForHTTPHeader ? mozilla::ArrayLength(SPOOFED_HTTP_UA_OS)
|
|
947 | - : mozilla::ArrayLength(SPOOFED_UA_OS)) -
|
|
951 | + (spoofOs ? mozilla::ArrayLength(SPOOFED_HTTP_UA_OS)
|
|
952 | + : mozilla::ArrayLength(SPOOFED_UA_OS)) -
|
|
948 | 953 | 1 + 5 + 3 + 10 + mozilla::ArrayLength(LEGACY_UA_GECKO_TRAIL) - 1 + 9 + 3 +
|
949 | 954 | 2;
|
950 | 955 | userAgent.SetCapacity(preallocatedLength);
|
... | ... | @@ -954,7 +959,7 @@ void nsRFPService::GetSpoofedUserAgent(nsACString& userAgent, |
954 | 959 | // "Mozilla/5.0 (%s; rv:%d.0) Gecko/%d Firefox/%d.0"
|
955 | 960 | userAgent.AssignLiteral("Mozilla/5.0 (");
|
956 | 961 | |
957 | - if (isForHTTPHeader) {
|
|
962 | + if (spoofOs) {
|
|
958 | 963 | userAgent.AppendLiteral(SPOOFED_HTTP_UA_OS);
|
959 | 964 | } else {
|
960 | 965 | userAgent.AppendLiteral(SPOOFED_UA_OS);
|