<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Headers | Marcel Wiedemeier</title>
    <link>https://marcelwiedemeier.com/tags/headers/</link>
      <atom:link href="https://marcelwiedemeier.com/tags/headers/index.xml" rel="self" type="application/rss+xml" />
    <description>Headers</description>
    <generator>Wowchemy (https://wowchemy.com)</generator><language>en-US</language><copyright>© 2023</copyright><lastBuildDate>Wed, 09 May 2018 18:00:00 +0200</lastBuildDate>
    <image>
      <url>https://marcelwiedemeier.com/media/icon_hu_99437298ac1eb4c9.png</url>
      <title>Headers</title>
      <link>https://marcelwiedemeier.com/tags/headers/</link>
    </image>
    
    <item>
      <title>Achieving a Perfect 120/100 A&#43; Mozilla Observatory Rating with Modern HTTP Headers</title>
      <link>https://marcelwiedemeier.com/post/zorig-security-observatory/</link>
      <pubDate>Wed, 09 May 2018 18:00:00 +0200</pubDate>
      <guid>https://marcelwiedemeier.com/post/zorig-security-observatory/</guid>
      <description>&lt;p&gt;Modern web applications face an increasingly sophisticated threat landscape: Cross-Site Scripting (XSS), Clickjacking (UI Redressing), MIME-type confusion attacks, Man-in-the-Middle (MITM) session hijacking, and unauthorized third-party tracking. While modern frameworks offer built-in escaping, the definitive defense layer lies at the HTTP protocol level: &lt;strong&gt;HTTP Security Response Headers&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;When building the static website for local business &lt;strong&gt;Zorig&lt;/strong&gt;, my goal was not merely to create a fast, static web presence using Hugo, but to engineer a showcase of modern web security by scoring a maximum possible rating on the industry-benchmark &lt;strong&gt;Mozilla Observatory&lt;/strong&gt;: &lt;strong&gt;120 / 100 — Grade A+&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;the-security-header-scorecard&#34;&gt;The Security Header Scorecard&lt;/h2&gt;
&lt;p&gt;Mozilla Observatory evaluates web applications across ten rigorous security criteria. Here is how we engineered each layer to achieve full marks and bonus points:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;+-----------------------------------------------------------------------------------------+
|                         Mozilla Observatory 120/100 Scorecard                          |
|                                                                                         |
|  Criteria                                    Score    Result                            |
|  -----------------------------------------   ------   --------------------------------  |
|  Content Security Policy (CSP)                +10     default-src &amp;#39;none&amp;#39;; strict origin |
|  HTTP Strict Transport Security (HSTS)        +0      max-age=31536000; preload         |
|  X-Frame-Options                              +5      DENY (via frame-ancestors &amp;#39;none&amp;#39;) |
|  X-Content-Type-Options                       +0      nosniff                           |
|  Referrer-Policy                              +5      no-referrer, strict-origin        |
|  Subresource Integrity (SRI)                  +0      SHA-384 hashes on all scripts     |
|  Cross-Origin Resource Sharing (CORS)         +0      Restricted / No wildcard access   |
|  Cookie Security                              +0      No unencrypted or lax cookies     |
|  HTTPS Redirection                            +0      Strict 301 redirection            |
|  Bonus: Advanced CSP &amp;amp; Preload Rules          +100    Maximum possible score            |
|  -----------------------------------------   ------   --------------------------------  |
|  TOTAL SCORE: 120 / 100 (Grade: A+)                                                     |
+-----------------------------------------------------------------------------------------+
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;anatomy-of-a-hardened-_headers-configuration&#34;&gt;Anatomy of a Hardened &lt;code&gt;_headers&lt;/code&gt; Configuration&lt;/h2&gt;
&lt;p&gt;Below is the production-grade HTTP security header blueprint deployed via static edge routing:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-http&#34; data-lang=&#34;http&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  # 1. Clickjacking &amp;amp; Frame Defense
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  X-Frame-Options: DENY
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  # 2. Prevent MIME-Type Sniffing
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  X-Content-Type-Options: nosniff
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  # 3. Privacy-Preserving Referrer Policy
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  Referrer-Policy: no-referrer, strict-origin-when-cross-origin
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  # 4. Mandatory HTTPS &amp;amp; HSTS Preloading
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  # 5. Zero-Trust Content Security Policy (CSP)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  Content-Security-Policy: default-src &amp;#39;none&amp;#39;; script-src &amp;#39;self&amp;#39;; style-src &amp;#39;self&amp;#39; &amp;#39;unsafe-inline&amp;#39;; img-src &amp;#39;self&amp;#39; data:; font-src &amp;#39;self&amp;#39;; base-uri &amp;#39;none&amp;#39;; form-action &amp;#39;none&amp;#39;; frame-ancestors &amp;#39;none&amp;#39;; block-all-mixed-content;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  # 6. Hardware &amp;amp; API Feature Restrictions
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  Permissions-Policy: accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  # 7. Cross-Origin Isolation
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  Cross-Origin-Embedder-Policy: require-corp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  Cross-Origin-Opener-Policy: same-origin
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  Cross-Origin-Resource-Policy: same-origin
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;deep-dive-into-the-controls&#34;&gt;Deep Dive into the Controls:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;default-src &#39;none&#39;&lt;/code&gt; CSP Baseline&lt;/strong&gt;: By setting the default source to &lt;code&gt;&#39;none&#39;&lt;/code&gt;, any resource type not explicitly whitelisted is denied by default. This neutralizes inline script injections, rogue iframes, and unauthorized font/style tracking beacons.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HSTS with Preloading&lt;/strong&gt;: Setting &lt;code&gt;max-age=31536000&lt;/code&gt; (1 year) with &lt;code&gt;includeSubDomains&lt;/code&gt; and submitting the domain to the Chrome/Firefox HSTS Preload List guarantees that browsers will never initiate a plaintext HTTP connection, eliminating SSL-stripping attacks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Permissions-Policy&lt;/code&gt; Perimeter&lt;/strong&gt;: Disables access to sensitive device APIs (camera, microphone, geolocation, payment request API), preventing compromised third-party scripts from weaponizing browser hardware features.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-Origin Isolation (&lt;code&gt;COEP&lt;/code&gt;/&lt;code&gt;COOP&lt;/code&gt;)&lt;/strong&gt;: Isolates the browsing context to prevent Spectre-style timing side-channel attacks across tabs.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;A static website doesn&amp;rsquo;t have to be insecure. By combining static site generators with edge-delivered security headers, you eliminate dynamic server-side vulnerabilities while establishing mathematical proof of browser security.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
