Skip to content

Commit 4189a83

Browse files
committed
Add ability to disable HSTS
1 parent 4d6f764 commit 4189a83

File tree

6 files changed

+40
-1
lines changed

6 files changed

+40
-1
lines changed

browser/components/preferences/main.inc.xhtml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,13 @@
177177
</hbox>
178178
<description class="indent tip-caption" data-l10n-id="r3dfox-csp-desc"/>
179179

180+
<hbox align="center">
181+
<checkbox id="r3dfoxhsts"
182+
data-l10n-id="r3dfox-hsts"
183+
preference="network.stricttransportsecurity.enabled"/>
184+
</hbox>
185+
<description class="indent tip-caption" data-l10n-id="r3dfox-hsts-desc"/>
186+
180187
<hbox align="center">
181188
<checkbox id="r3dfoxe10s"
182189
data-l10n-id="r3dfox-e10s"

browser/components/preferences/main.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Preferences.addAll([
8282
{ id: "widget.windows-style.modern", type: "bool" },
8383
{ id: "browser.e10s.disabled", type: "bool" },
8484
{ id: "security.csp.enable", type: "bool", inverted: true },
85+
{ id: "network.stricttransportsecurity.enabled", type: "bool", inverted: true },
8586
{ id: "accessibility.force_disabled", type: "int" },
8687

8788
/* Tab preferences

browser/locales/en-US/browser/preferences/preferences.ftl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,11 @@ r3dfox-csp =
242242
243243
r3dfox-csp-desc = CSP is a security feature, improperly designed websites may require disabling CSP. Not recommended unless you know what you are doing.
244244
245+
r3dfox-hsts =
246+
.label = Disable HTTP Strict Transport Security (HSTS)
247+
248+
r3dfox-hsts-desc = HSTS is a security feature, websites with missing, expired, or wrong certificates may require disabling HSTS to access. Not recommended unless you know what you are doing.
249+
245250
r3dfox-e10s =
246251
.label = Disable content multiprocess (e10s) (BETA)
247252

modules/libpref/init/all.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1637,6 +1637,8 @@ pref("network.proxy.autoconfig_retry_interval_min", 5); // 5 seconds
16371637
pref("network.proxy.autoconfig_retry_interval_max", 300); // 5 minutes
16381638
pref("network.proxy.enable_wpad_over_dhcp", true);
16391639

1640+
// Master switch for HSTS usage (security <-> privacy tradeoff)
1641+
pref("network.stricttransportsecurity.enabled", true);
16401642
// Use the HSTS preload list by default
16411643
pref("network.stricttransportsecurity.preloadlist", true);
16421644

security/manager/ssl/nsSiteSecurityService.cpp

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ void SiteHSTSState::ToString(nsCString& aString) {
168168
}
169169

170170
nsSiteSecurityService::nsSiteSecurityService()
171-
: mUsePreloadList(true), mPreloadListTimeOffset(0), mDafsa(kDafsa) {}
171+
: mUsePreloadList(true), mPreloadListTimeOffset(0), mUseStsService(true), mDafsa(kDafsa) {}
172172

173173
nsSiteSecurityService::~nsSiteSecurityService() = default;
174174

@@ -185,6 +185,10 @@ nsresult nsSiteSecurityService::Init() {
185185
"network.stricttransportsecurity.preloadlist", true);
186186
mozilla::Preferences::AddStrongObserver(
187187
this, "network.stricttransportsecurity.preloadlist");
188+
mUseStsService = mozilla::Preferences::GetBool(
189+
"network.stricttransportsecurity.enabled", true);
190+
mozilla::Preferences::AddStrongObserver(
191+
this, "network.stricttransportsecurity.enabled");
188192
mPreloadListTimeOffset =
189193
mozilla::Preferences::GetInt("test.currentTimeOffsetSeconds", 0);
190194
mozilla::Preferences::AddStrongObserver(this,
@@ -315,6 +319,11 @@ nsresult nsSiteSecurityService::SetHSTSState(
315319
MOZ_ASSERT(aHSTSState == SecurityPropertySet,
316320
"HSTS State must be SecurityPropertySet");
317321

322+
// Exit early if STS not enabled
323+
if (!mUseStsService) {
324+
return NS_OK;
325+
}
326+
318327
int64_t expiretime = ExpireTimeFromMaxAge(maxage);
319328
SiteHSTSState siteState(hostname, aOriginAttributes, expiretime, aHSTSState,
320329
includeSubdomains);
@@ -742,6 +751,13 @@ nsSiteSecurityService::IsSecureURI(nsIURI* aURI,
742751
nsAutoCString hostname;
743752
nsresult rv = GetHost(aURI, hostname);
744753
NS_ENSURE_SUCCESS(rv, rv);
754+
755+
// Exit early if STS not enabled
756+
if (!mUseStsService) {
757+
*aResult = false;
758+
return NS_OK;
759+
}
760+
745761
/* An IP address never qualifies as a secure URI. */
746762
if (HostIsIPAddress(hostname)) {
747763
*aResult = false;
@@ -928,6 +944,11 @@ nsresult nsSiteSecurityService::IsSecureHost(
928944
NS_ENSURE_ARG(aResult);
929945
*aResult = false;
930946

947+
// Exit early if STS not enabled
948+
if (!mUseStsService) {
949+
return NS_OK;
950+
}
951+
931952
/* An IP address never qualifies as a secure URI. */
932953
const nsCString& flatHost = PromiseFlatCString(aHost);
933954
if (HostIsIPAddress(flatHost)) {
@@ -1008,6 +1029,8 @@ nsSiteSecurityService::Observe(nsISupports* /*subject*/, const char* topic,
10081029
if (strcmp(topic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID) == 0) {
10091030
mUsePreloadList = mozilla::Preferences::GetBool(
10101031
"network.stricttransportsecurity.preloadlist", true);
1032+
mUseStsService = mozilla::Preferences::GetBool(
1033+
"network.stricttransportsecurity.enabled", true);
10111034
mPreloadListTimeOffset =
10121035
mozilla::Preferences::GetInt("test.currentTimeOffsetSeconds", 0);
10131036
}

security/manager/ssl/nsSiteSecurityService.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ class nsSiteSecurityService : public nsISiteSecurityService,
150150
nsIDataStorage::DataType aDataStorageType);
151151

152152
bool mUsePreloadList;
153+
bool mUseStsService;
153154
int64_t mPreloadListTimeOffset;
154155
nsCOMPtr<nsIDataStorage> mSiteStateStorage;
155156
const mozilla::Dafsa mDafsa;

0 commit comments

Comments
 (0)