HTTP Security Headers Checker
Audit pasted HTTP security headers for browser policy, session protection and exposure risks with local scoring and a prioritized fix order.| Status | Control | Priority | Observed evidence | Recommended action | Copy |
|---|---|---|---|---|---|
| {{ statusLabel(row.status) }} | {{ row.control }} | {{ row.priority }} | {{ row.observed }} — {{ row.evidence }} | {{ row.recommendation }} |
| Order | Priority | Control | Fix | Target example | Copy |
|---|---|---|---|---|---|
| {{ index + 1 }} | {{ row.priority }} | {{ row.control }} | {{ row.recommendation }} | {{ row.target }} | |
| No Fail or Warn rows are queued for this capture. | |||||
| Header | Occurrences | Audit role | Value | Copy |
|---|---|---|---|---|
| {{ row.header }} | {{ row.occurrences }} | {{ row.role }} | {{ row.value }} |
Browsers use response headers to enforce boundaries before they render a document, run scripts, expose a response across origins, or store a cookie. Those controls can reduce downgrade, injection, clickjacking, data-leakage, and caching risks, but they work only on the responses where they are actually delivered.
One capture represents one route and one moment. A final HTTPS document, redirect, API response, static asset, signed-in page, and error page may pass through different application, proxy, or content-delivery rules. A secure-looking homepage cannot prove that account pages or edge-generated errors carry the same policies.
| Policy area | Representative evidence | Important boundary |
|---|---|---|
| Transport | Strict-Transport-Security |
Browsers ignore HSTS learned over plain HTTP. |
| Executable content and framing | CSP, frame-ancestors, and nosniff |
A report-only CSP records violations but does not enforce them. |
| Privacy and browser features | Referrer-Policy and Permissions-Policy | The safest value depends on legitimate analytics and feature needs. |
| Session and storage | Cookie attributes and Cache-Control | A public asset and a personalized account response need different storage decisions. |
| Cross-origin exposure | CORS, COOP, COEP, and CORP | Stricter isolation can break popups, embeds, and third-party resources. |
Header presence alone is not enough. A CSP containing broad wildcards or unsafe script tokens can offer little useful restriction. SameSite=None without Secure is not a sound cross-site cookie setup. A wildcard CORS response cannot be combined with credential sharing, and an HSTS policy should not cover subdomains until each one is HTTPS-ready.
Security headers are defense in depth, not proof that an application is secure. They do not find authorization flaws, vulnerable dependencies, injection bugs in server code, or exposed secrets. Their value is to make browser policy explicit and to expose missing, weak, contradictory, or obsolete controls for a specific response.
How to Use This Tool:
Start with one captured response and describe its real context before judging any header value.
- Paste or load one response header block in Response headers. Redact cookie values, private hosts, tokens, trace identifiers, and reporting endpoints first.
- Give the capture a short Target label that identifies the route, environment, state, or response variant without adding secret details.
- Choose the matching Response profile: browser document, sensitive app page, JSON or API response, or static asset response.
- Select whether the evidence came from a final HTTPS response, plain HTTP response, or redirect hop. This changes HSTS and cookie interpretation.
- Review failing and warning rows in Header findings, then follow Remediation plan in priority order. Parsing notes must be resolved before the score is trusted.
- Capture and compare the corresponding redirect, success, error, signed-in, and edge responses after remediation.
Interpreting Results:
The overall state follows the most serious finding: any Fail produces Fail, otherwise any Warn produces Review, and a capture with only Pass or Info rows produces Pass. The numerical score and grade help order work, but a bonus can lift the score above 100 and does not turn the result into a compliance certificate.
- Prioritize the actual failing or warning control, not the grade in isolation.
- Informational findings carry no penalty. Hiding them shortens the ledger without changing the score, grade, counts, or remediation order.
- Area posture shows where weighted loss is concentrated. An area at 100 may simply contain no scored controls for the selected context.
- Verify proposed CSP, HSTS, CORS, cookie, and isolation changes in staging; overly strict values can break legitimate application behavior.
Technical Details:
The parser accepts an optional HTTP status line followed by Name: value fields. Folded continuation lines are joined with a warning. Repeated cookies remain separate; other repeated fields are combined and flagged because clients or intermediaries may merge or override them.
Rule Core
Thirteen checks form the posture model. Context changes applicability and severity, so the selected response profile and transport are part of the evidence rather than labels added after scoring.
| Control | Key pass, warning, or failure rule |
|---|---|
| HSTS | Final HTTPS needs a numeric max-age. Less than 15,552,000 seconds warns; less than 31,536,000 seconds also warns; missing includeSubDomains warns. A valid one-year policy with subdomain coverage passes. Plain HTTP cannot establish HSTS. |
| CSP | Missing enforced CSP fails documents but warns for an API. Report-only warns. Unsafe script tokens or wildcard executable sources fail; missing default-src, object-src 'none', or base-uri warns. |
| MIME and framing | X-Content-Type-Options passes only as nosniff. Framing passes with CSP frame-ancestors or recognized DENY/SAMEORIGIN; obsolete ALLOW-FROM fails. |
| Referrer and features | Strong referrer values pass; unsafe-url, origin-when-cross-origin, and no-referrer-when-downgrade fail. Permissions-Policy warns on wildcard access for reviewed powerful features. |
| Isolation | Missing isolation is contextual; COOP: unsafe-none warns. A good COOP value plus COEP or CORP earns one bonus point. |
| Cookies | HTTPS cookies missing Secure, or SameSite=None without Secure, fail. Missing HttpOnly or SameSite warns when no failure condition applies. |
| Caching | Sensitive responses need no-store or a private policy; missing or looser storage rules warn. Non-sensitive profiles keep cache decisions informational unless an explicit suitable policy is present. |
| CORS | Wildcard origin with credentials fails. Wildcard without credentials warns outside an API profile; a named origin passes with a reminder to emit Vary: Origin when selected dynamically. |
| Exposure and reporting | Common server or framework banners warn. HPKP fails and other obsolete fields warn. A linked enforced-CSP reporting endpoint earns one bonus point. |
Formula Core
Each Fail loses its full priority weight, each Warn loses 45% of that weight, and Pass or Info loses nothing. The weight scale is Critical 28, High 20, Medium 12, Low 6, and Informational 0. Passed HSTS preload syntax can add two points; passed isolation and reporting conditions can add one point each.
For finding i, the penalty is its priority weight for Fail, 0.45 times that weight for Warn, and zero otherwise. Bonuses apply only when their finding passes.
| Grade | Boundary |
|---|---|
| A+ | 100 or higher and no failed findings |
| A | 90 or higher |
| B | 80 to 89 |
| C | 70 to 79 |
| D | 60 to 69 |
| E | 50 to 59 |
| F | Below 50 |
Area posture uses only findings with positive weights. Retained posture is the rounded percentage of possible weight left after penalties within Transport, Browser policy, Privacy, Isolation, Session, or Exposure. An area with no positive-weight checks returns 100.
Privacy and Accuracy Notes:
The pasted capture and local file are analyzed in the browser; the checker does not fetch the target. Exports can reproduce header values, including cookies and reporting destinations, so redact sensitive values before analysis and protect any downloaded evidence.
- The rules intentionally inspect a practical subset of header syntax. Browser support, application behavior, policy interactions, and route-specific requirements still need testing.
- The score is an advisory model defined for this checker, not an official standard, penetration test, or proof of compliance.
- A header copied from developer tools or a proxy log can be stale or incomplete. Capture the final public response again after every remediation.
References:
- RFC 6797: HTTP Strict Transport Security, Internet Engineering Task Force, November 2012.
- Content Security Policy Level 3, World Wide Web Consortium.
- RFC 9111: HTTP Caching, Internet Engineering Task Force, June 2022.
- Cookies: HTTP State Management Mechanism, IETF HTTP Working Group.
- How to audit HTTP security headers, Simplified Guide.
- How to add custom response headers in Nginx, Simplified Guide.