author | Tim Huang <tihuang@mozilla.com> |
Thu, 08 Jun 2017 14:38:21 +0800 | |
changeset 364980 | a9c101b46ab6138f390fb4128bb3da403bfe529c |
parent 364979 | 121b01dc9fdef56da1820520d6130913c5d4c62b |
child 364981 | 76040a8fabaaa1484900aa7fa6937e275e5c0bfc |
push id | 91680 |
push user | kwierso@gmail.com |
push date | Wed, 21 Jun 2017 01:32:01 +0000 |
treeherder | mozilla-inbound@f7b9dc31956c [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | arthuredelstein, mcmanus |
bugs | 1333651 |
milestone | 56.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
netwerk/protocol/http/nsHttpHandler.cpp | file | annotate | diff | comparison | revisions | |
netwerk/protocol/http/nsHttpHandler.h | file | annotate | diff | comparison | revisions |
--- a/netwerk/protocol/http/nsHttpHandler.cpp +++ b/netwerk/protocol/http/nsHttpHandler.cpp @@ -431,16 +431,27 @@ nsHttpHandler::Init() appInfo->GetName(mAppName); } appInfo->GetVersion(mAppVersion); mAppName.StripChars(R"( ()<>@,;:\"/[]?={})"); } else { mAppVersion.AssignLiteral(MOZ_APP_UA_VERSION); } + // Generating the spoofed userAgent for fingerprinting resistance. We will + // round the version to the nearest 10. By doing so, the anonymity group will + // cover more versions instead of one version. + uint32_t spoofedVersion = mAppVersion.ToInteger(&rv); + if (NS_SUCCEEDED(rv)) { + spoofedVersion = spoofedVersion - (spoofedVersion % 10); + mSpoofedUserAgent.Assign(nsPrintfCString( + "Mozilla/5.0 (Windows NT 6.1; rv:%d.0) Gecko/20100101 Firefox/%d.0", + spoofedVersion, spoofedVersion)); + } + mSessionStartTime = NowInSeconds(); mHandlerActive = true; rv = mAuthCache.Init(); if (NS_FAILED(rv)) return rv; rv = mPrivateAuthCache.Init(); if (NS_FAILED(rv)) return rv; @@ -773,16 +784,22 @@ nsHttpHandler::GenerateHostPort(const ns //----------------------------------------------------------------------------- // nsHttpHandler <private> //----------------------------------------------------------------------------- const nsAFlatCString & nsHttpHandler::UserAgent() { + if (nsContentUtils::ShouldResistFingerprinting() && + !mSpoofedUserAgent.IsEmpty()) { + LOG(("using spoofed userAgent : %s\n", mSpoofedUserAgent.get())); + return mSpoofedUserAgent; + } + if (mUserAgentOverride) { LOG(("using general.useragent.override : %s\n", mUserAgentOverride.get())); return mUserAgentOverride; } if (mUserAgentIsDirty) { BuildUserAgent(); mUserAgentIsDirty = false;
--- a/netwerk/protocol/http/nsHttpHandler.h +++ b/netwerk/protocol/http/nsHttpHandler.h @@ -487,16 +487,17 @@ private: nsXPIDLCString mAppName; nsXPIDLCString mAppVersion; nsCString mCompatFirefox; bool mCompatFirefoxEnabled; nsXPIDLCString mCompatDevice; nsCString mDeviceModelId; nsCString mUserAgent; + nsCString mSpoofedUserAgent; nsXPIDLCString mUserAgentOverride; bool mUserAgentIsDirty; // true if mUserAgent should be rebuilt bool mAcceptLanguagesIsDirty; bool mPromptTempRedirect; // Persistent HTTPS caching flag