Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(100)

Unified Diff: net/http/transport_security_state.h

Issue 826423009: Treat HSTS and HPKP state independently. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rsleevi comments Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/http/http_security_headers_unittest.cc ('k') | net/http/transport_security_state.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/http/transport_security_state.h
diff --git a/net/http/transport_security_state.h b/net/http/transport_security_state.h
index f9e82c7553c137873cd5b5fb3df19b8fe554501b..6a4615ca88d0e413b78d8e5cb8632eb233aca462 100644
--- a/net/http/transport_security_state.h
+++ b/net/http/transport_security_state.h
@@ -50,6 +50,10 @@ class NET_EXPORT TransportSecurityState
// A DomainState describes the transport security state (required upgrade
// to HTTPS, and/or any public key pins).
+ //
+ // TODO(davidben): STSState and PKPState are queried and processed
+ // independently (with the exception of ShouldSSLErrorsBeFatal triggering on
+ // both and on-disk storage). DomainState should be split into the two.
class NET_EXPORT DomainState {
public:
enum UpgradeMode {
@@ -62,6 +66,9 @@ class NET_EXPORT TransportSecurityState
~DomainState();
struct STSState {
+ STSState();
+ ~STSState();
+
// The absolute time (UTC) when the |upgrade_mode| (and other state) was
// observed.
base::Time last_observed;
@@ -74,6 +81,10 @@ class NET_EXPORT TransportSecurityState
// Are subdomains subject to this policy state?
bool include_subdomains;
+
+ // The domain which matched during a search for this DomainState entry.
+ // Updated by |GetDynamicDomainState| and |GetStaticDomainState|.
+ std::string domain;
};
struct PKPState {
@@ -97,6 +108,10 @@ class NET_EXPORT TransportSecurityState
// Are subdomains subject to this policy state?
bool include_subdomains;
+
+ // The domain which matched during a search for this DomainState entry.
+ // Updated by |GetDynamicDomainState| and |GetStaticDomainState|.
+ std::string domain;
};
// Takes a set of SubjectPublicKeyInfo |hashes| and returns true if:
@@ -133,12 +148,6 @@ class NET_EXPORT TransportSecurityState
STSState sts;
PKPState pkp;
-
- // The following members are not valid when stored in |enabled_hosts_|:
-
- // The domain which matched during a search for this DomainState entry.
- // Updated by |GetDynamicDomainState| and |GetStaticDomainState|.
- std::string domain;
};
class NET_EXPORT Iterator {
@@ -207,24 +216,21 @@ class NET_EXPORT TransportSecurityState
bool DeleteDynamicDataForHost(const std::string& host);
// Returns true and updates |*result| iff there is a static (built-in)
- // DomainState for |host|.
- //
- // If |host| matches both an exact entry and is a subdomain of another entry,
- // the exact match determines the return value.
- //
- // Note that this method is not const because it opportunistically removes
- // entries that have expired.
+ // DomainState for |host|. If multiple entries match |host|, the most specific
+ // match determines the return value.
bool GetStaticDomainState(const std::string& host, DomainState* result) const;
- // Returns true and updates |*result| iff there is a dynamic DomainState
- // (learned from HSTS or HPKP headers, or set by the user, or other means) for
- // |host|.
- //
- // If |host| matches both an exact entry and is a subdomain of another entry,
- // the exact match determines the return value.
+ // Returns true and updates |*result| iff |host| has HSTS or HPKP state (or
+ // both). The two are queried independently and combined into a single
+ // DomainState. If multiple HSTS (respectively, HPKP) entries match |host|,
+ // the most specific match determines the HSTS (respectively, HPKP) portion of
+ // the return value.
//
// Note that this method is not const because it opportunistically removes
// entries that have expired.
+ //
+ // TODO(davidben): STSState and PKPState should be queried independently at
+ // the API level too.
bool GetDynamicDomainState(const std::string& host, DomainState* result);
// Processes an HSTS header value from the host, adding entries to
@@ -239,13 +245,16 @@ class NET_EXPORT TransportSecurityState
// Adds explicitly-specified data as if it was processed from an
// HSTS header (used for net-internals and unit tests).
- bool AddHSTS(const std::string& host, const base::Time& expiry,
+ void AddHSTS(const std::string& host,
+ const base::Time& expiry,
bool include_subdomains);
// Adds explicitly-specified data as if it was processed from an
// HPKP header (used for net-internals and unit tests).
- bool AddHPKP(const std::string& host, const base::Time& expiry,
- bool include_subdomains, const HashValueVector& hashes);
+ void AddHPKP(const std::string& host,
+ const base::Time& expiry,
+ bool include_subdomains,
+ const HashValueVector& hashes);
// Returns true iff we have any static public key pins for the |host| and
// iff its set of required pins is the set we expect for Google
@@ -290,6 +299,19 @@ class NET_EXPORT TransportSecurityState
// changed.
void DirtyNotify();
+ // Adds HSTS state to |host|.
+ void AddHSTSInternal(const std::string& host,
+ DomainState::UpgradeMode upgrade_mode,
+ const base::Time& expiry,
+ bool include_subdomains);
+
+ // Adds HPKP state to |host|.
+ void AddHPKPInternal(const std::string& host,
+ const base::Time& last_observed,
+ const base::Time& expiry,
+ bool include_subdomains,
+ const HashValueVector& hashes);
+
// Enable TransportSecurity for |host|. |state| supercedes any previous
// state for the |host|, including static entries.
//
@@ -301,7 +323,9 @@ class NET_EXPORT TransportSecurityState
// the result.
static std::string CanonicalizeHost(const std::string& hostname);
- // The set of hosts that have enabled TransportSecurity.
+ // The set of hosts that have enabled TransportSecurity. |sts.domain| and
+ // |pkp.domain| will always be empty for a DomainState in this map; the domain
+ // comes from the map key instead.
DomainStateMap enabled_hosts_;
Delegate* delegate_;
« no previous file with comments | « net/http/http_security_headers_unittest.cc ('k') | net/http/transport_security_state.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698