Prior to the release of the Mozilla Observatory a year ago, I ran a scan of the Alexa Top 1M websites. Despite being available for years, the usage rates of modern defensive security technologies was frustratingly low. A lack of tooling combined with poor and scattered documentation had led to there being little awareness around countermeasures such as Content Security Policy (CSP), HTTP Strict Transport Security (HSTS), and Subresource Integrity (SRI).
A few months after the Observatory’s release — and 1.5M Observatory scans later — I reassessed the Top 1M websites. The situation appeared as if it was beginning to improve, with the use of HSTS and CSP up by approximately 50%. But were those improvements simply low-hanging fruit, or has the situation continued to improve over the following months?
|Technology||April 2016||October 2016||June 2017||% Change|
|Content Security Policy (CSP)||.005%1
|Cross-origin Resource Sharing (CORS)4||93.78%||96.21%||96.55%||+.4%|
|HTTP → HTTPS Redirection||5.06%5
|Public Key Pinning (HPKP)||0.43%||0.50%||0.71%||+42%|
|— HPKP Preloaded7||0.41%||0.47%||0.43%||-9%|
|Strict Transport Security (HSTS)8||1.75%||2.59%||4.37%||+69%|
|— HSTS Preloaded7||.158%||.231%||.337%||+46%|
|Subresource Integrity (SRI)||0.015%9||0.052%10||0.113%10||+117%|
The pace of improvement across the web appears to be continuing at an astounding rate. Although a 36% increase in the number of sites that support HTTPS might seem small, the absolute numbers are quite large — it represents over 119,000 websites.
Not only that, but 93,000 of those websites have chosen to be HTTPS by default, with 18,000 of them forbidding any HTTP access at all through the use of HTTP Strict Transport Security.
The sharp jump in the rate of Content Security Policy (CSP) usage is similarly surprising. It can be difficult to implement for a new website, and often requires extensive rearchitecting to retrofit to an existing site, as most of the Alexa Top 1M sites are. Between increasingly improving documentation, advances in CSP3 such as ‘strict-dynamic’, and CSP policy generators such as the Mozilla Laboratory, it appears that we might be turning a corner on CSP usage around the web.
Despite this progress, the vast majority of large websites around the web continue to not use Content Security Policy and Subresource Integrity. As these technologies — when properly used — can nearly eliminate huge classes of attacks against sites and their users, they are given a significant amount of weight in Observatory scans.
As a result of their low usage rates amongst established websites, they typically receive failing grades from the Observatory. Nevertheless, I continue to see improvements across the board:
|Grade||April 2016||October 2016||June 2017||% Change|
As 969,924 scans were successfully completed in the last survey, a decrease in failing grades by 2.8% implies that over 27,000 of the largest sites in the world have improved from a failing grade in the last eight months alone.
In fact, my research indicates that over 50,000 websites around the web have directly used the Mozilla Observatory to improve their grades, indicated by scanning their website, making an improvement, and then scanning their website again. Of these 50,000 websites, over 2,500 have improved all the way from a failing grade to an A or A+ grade.
When I first built the Observatory a year ago at Mozilla, I had never imagined that it would see such widespread use. 3.8M scans across 1.55M unique domains later, it seems to have made a significant difference across the internet. I feel incredibly lucky to work at a company like Mozilla that has provided me with a unique opportunity to work on a tool designed solely to make internet a better place.
- Allows 'unsafe-inline' in neither script-src nor style-src
- Allows 'unsafe-inline' in style-src only
- Amongst sites that set cookies
- Disallows foreign origins from reading the domain’s contents within user’s context
- Redirects from HTTP to HTTPS on the same domain, which allows HSTS to be set
- Redirects from HTTP to HTTPS, regardless of the final domain
- As listed in the Chromium preload list
- max-age set to at least six months
- Percentage is of sites that load scripts from a foreign origin
- Percentage is of sites that load scripts
- CSP frame-ancestors directive is allowed in lieu of an XFO header
- Strong CSP policy forbidding 'unsafe-inline' is allowed in lieu of an XXSSP header