findXpand
← All categories

Security Headers

← Back to Home

Checks the HTTP response headers a server sends back, comparing them against the standard hardening headers browsers use to prevent XSS, clickjacking, MIME sniffing, and downgrade attacks. Source: src/lib/securityHeadersAudit.ts (analyzeSecurityHeaders).

23 rules in this category.

IDRuleSeverityWeight
missing-strict-transport-securityMissing Strict-Transport-SecurityCritical15 pts
no-httpsSite not using HTTPSCritical15 pts
missing-content-security-policyMissing Content-Security-PolicyHigh12 pts
missing-x-frame-optionsMissing X-Frame-OptionsHigh10 pts
csp-unsafe-inlineCSP allows unsafe-inlineMedium8 pts
header-fetch-errorCould not fetch security headersMedium8 pts
missing-x-content-type-optionsMissing X-Content-Type-OptionsMedium8 pts
missing-cross-origin-opener-policyMissing Cross-Origin-Opener-PolicyMedium7 pts
csp-wildcardCSP uses wildcardsMedium6 pts
missing-cross-origin-embedder-policyMissing Cross-Origin-Embedder-PolicyMedium6 pts
missing-referrer-policyMissing Referrer-PolicyMedium6 pts
hsts-no-max-ageHSTS missing max-ageMedium5 pts
missing-permissions-policyMissing Permissions-PolicyMedium5 pts
server-header-exposedServer header reveals too much informationLow3 pts
x-powered-by-exposedX-Powered-By header exposes technology stackLow3 pts
present-content-security-policyContent-Security-Policy header is present and echoed back (truncated to 50 chars) in the report.Positive signal0 pts
present-cross-origin-embedder-policyCross-Origin-Embedder-Policy header is present and echoed back (truncated to 50 chars) in the report.Positive signal0 pts
present-cross-origin-opener-policyCross-Origin-Opener-Policy header is present and echoed back (truncated to 50 chars) in the report.Positive signal0 pts
present-permissions-policyPermissions-Policy header is present and echoed back (truncated to 50 chars) in the report.Positive signal0 pts
present-referrer-policyReferrer-Policy header is present and echoed back (truncated to 50 chars) in the report.Positive signal0 pts
present-strict-transport-securityStrict-Transport-Security header is present and echoed back (truncated to 50 chars) in the report.Positive signal0 pts
present-x-content-type-optionsX-Content-Type-Options header is present and echoed back (truncated to 50 chars) in the report.Positive signal0 pts
present-x-frame-optionsX-Frame-Options header is present and echoed back (truncated to 50 chars) in the report.Positive signal0 pts

missing-strict-transport-security

Missing Strict-Transport-Security

SeverityWeightCategory
Critical15 ptsSecurity Headers

What triggers it & why it matters: Forces HTTPS connections. This header was not present on the response.

How to fix it & effect on score: Add header: Strict-Transport-Security: max-age=31536000; includeSubDomains; preload Fixing this removes the 15 pts deduction from the Security Headers category score on the next scan.

What a pass looks like: Strict-Transport-Security header is present


no-https

Site not using HTTPS

SeverityWeightCategory
Critical15 ptsSecurity Headers

What triggers it & why it matters: The website is not served over HTTPS

How to fix it & effect on score: Migrate to HTTPS and redirect HTTP traffic to HTTPS Fixing this removes the 15 pts deduction from the Security Headers category score on the next scan.


missing-content-security-policy

Missing Content-Security-Policy

SeverityWeightCategory
High12 ptsSecurity Headers

What triggers it & why it matters: Prevents XSS attacks. This header was not present on the response.

How to fix it & effect on score: Add header: Content-Security-Policy: default-src 'self' Fixing this removes the 12 pts deduction from the Security Headers category score on the next scan.

What a pass looks like: Content-Security-Policy header is present


missing-x-frame-options

Missing X-Frame-Options

SeverityWeightCategory
High10 ptsSecurity Headers

What triggers it & why it matters: Prevents clickjacking attacks. This header was not present on the response.

How to fix it & effect on score: Add header: X-Frame-Options: DENY or SAMEORIGIN Fixing this removes the 10 pts deduction from the Security Headers category score on the next scan.

What a pass looks like: X-Frame-Options header is present


csp-unsafe-inline

CSP allows unsafe-inline

SeverityWeightCategory
Medium8 ptsSecurity Headers

What triggers it & why it matters: Content-Security-Policy includes unsafe-inline which reduces XSS protection

How to fix it & effect on score: Remove unsafe-inline and use nonces or hashes for inline scripts Fixing this removes the 8 pts deduction from the Security Headers category score on the next scan.


header-fetch-error

Could not fetch security headers

SeverityWeightCategory
Medium8 ptsSecurity Headers

What triggers it & why it matters: Failed to establish connection to analyze headers

How to fix it & effect on score: Ensure the URL is accessible and not blocked by CORS policies Fixing this removes the 8 pts deduction from the Security Headers category score on the next scan.


missing-x-content-type-options

Missing X-Content-Type-Options

SeverityWeightCategory
Medium8 ptsSecurity Headers

What triggers it & why it matters: Prevents MIME-type sniffing. This header was not present on the response.

How to fix it & effect on score: Add header: X-Content-Type-Options: nosniff Fixing this removes the 8 pts deduction from the Security Headers category score on the next scan.

What a pass looks like: X-Content-Type-Options header is present


missing-cross-origin-opener-policy

Missing Cross-Origin-Opener-Policy

SeverityWeightCategory
Medium7 ptsSecurity Headers

What triggers it & why it matters: Isolates browsing context. This header was not present on the response.

How to fix it & effect on score: Add header: Cross-Origin-Opener-Policy: same-origin Fixing this removes the 7 pts deduction from the Security Headers category score on the next scan.

What a pass looks like: Cross-Origin-Opener-Policy header is present


csp-wildcard

CSP uses wildcards

SeverityWeightCategory
Medium6 ptsSecurity Headers

What triggers it & why it matters: Content-Security-Policy contains overly permissive wildcards

How to fix it & effect on score: Use specific domains instead of * in directives Fixing this removes the 6 pts deduction from the Security Headers category score on the next scan.


missing-cross-origin-embedder-policy

Missing Cross-Origin-Embedder-Policy

SeverityWeightCategory
Medium6 ptsSecurity Headers

What triggers it & why it matters: Prevents cross-origin resource embedding. This header was not present on the response.

How to fix it & effect on score: Add header: Cross-Origin-Embedder-Policy: require-corp Fixing this removes the 6 pts deduction from the Security Headers category score on the next scan.

What a pass looks like: Cross-Origin-Embedder-Policy header is present


missing-referrer-policy

Missing Referrer-Policy

SeverityWeightCategory
Medium6 ptsSecurity Headers

What triggers it & why it matters: Controls referrer information. This header was not present on the response.

How to fix it & effect on score: Add header: Referrer-Policy: strict-origin-when-cross-origin Fixing this removes the 6 pts deduction from the Security Headers category score on the next scan.

What a pass looks like: Referrer-Policy header is present


hsts-no-max-age

HSTS missing max-age

SeverityWeightCategory
Medium5 ptsSecurity Headers

What triggers it & why it matters: The Strict-Transport-Security header should include max-age directive

How to fix it & effect on score: Ensure max-age is set to at least 31536000 (1 year) Fixing this removes the 5 pts deduction from the Security Headers category score on the next scan.


missing-permissions-policy

Missing Permissions-Policy

SeverityWeightCategory
Medium5 ptsSecurity Headers

What triggers it & why it matters: Controls browser features and APIs. This header was not present on the response.

How to fix it & effect on score: Add header: Permissions-Policy: geolocation=(), microphone=(), camera=() Fixing this removes the 5 pts deduction from the Security Headers category score on the next scan.

What a pass looks like: Permissions-Policy header is present


server-header-exposed

Server header reveals too much information

SeverityWeightCategory
Low3 ptsSecurity Headers

What triggers it & why it matters: The Server header reveals: (actual value)

How to fix it & effect on score: Remove or minimize the Server header to reduce information disclosure Fixing this removes the 3 pts deduction from the Security Headers category score on the next scan.


x-powered-by-exposed

X-Powered-By header exposes technology stack

SeverityWeightCategory
Low3 ptsSecurity Headers

What triggers it & why it matters: The X-Powered-By header reveals: (actual value)

How to fix it & effect on score: Remove or obscure the X-Powered-By header to reduce information disclosure Fixing this removes the 3 pts deduction from the Security Headers category score on the next scan.


present-content-security-policy

Content-Security-Policy header is present

SeverityWeightCategory
Positive signal0 ptsSecurity Headers

What triggers it & why it matters: This rule only ever surfaces as a passing signal in the current source — it fires (as a pass) when: Content-Security-Policy header is present and echoed back (truncated to 50 chars) in the report.. There is no separate failing issue() call under this exact id; the failure condition is the logical negation of the pass condition, and in most cases is covered by a related rule id documented elsewhere in this category (see the table above for a sibling rule on the same feature).

Effect on score: Meeting this condition costs nothing and confirms a positive signal. Missing it doesn't directly deduct points under this id — it typically shows up as a deduction under the related failing rule instead.


present-cross-origin-embedder-policy

Cross-Origin-Embedder-Policy header is present

SeverityWeightCategory
Positive signal0 ptsSecurity Headers

What triggers it & why it matters: This rule only ever surfaces as a passing signal in the current source — it fires (as a pass) when: Cross-Origin-Embedder-Policy header is present and echoed back (truncated to 50 chars) in the report.. There is no separate failing issue() call under this exact id; the failure condition is the logical negation of the pass condition, and in most cases is covered by a related rule id documented elsewhere in this category (see the table above for a sibling rule on the same feature).

Effect on score: Meeting this condition costs nothing and confirms a positive signal. Missing it doesn't directly deduct points under this id — it typically shows up as a deduction under the related failing rule instead.


present-cross-origin-opener-policy

Cross-Origin-Opener-Policy header is present

SeverityWeightCategory
Positive signal0 ptsSecurity Headers

What triggers it & why it matters: This rule only ever surfaces as a passing signal in the current source — it fires (as a pass) when: Cross-Origin-Opener-Policy header is present and echoed back (truncated to 50 chars) in the report.. There is no separate failing issue() call under this exact id; the failure condition is the logical negation of the pass condition, and in most cases is covered by a related rule id documented elsewhere in this category (see the table above for a sibling rule on the same feature).

Effect on score: Meeting this condition costs nothing and confirms a positive signal. Missing it doesn't directly deduct points under this id — it typically shows up as a deduction under the related failing rule instead.


present-permissions-policy

Permissions-Policy header is present

SeverityWeightCategory
Positive signal0 ptsSecurity Headers

What triggers it & why it matters: This rule only ever surfaces as a passing signal in the current source — it fires (as a pass) when: Permissions-Policy header is present and echoed back (truncated to 50 chars) in the report.. There is no separate failing issue() call under this exact id; the failure condition is the logical negation of the pass condition, and in most cases is covered by a related rule id documented elsewhere in this category (see the table above for a sibling rule on the same feature).

Effect on score: Meeting this condition costs nothing and confirms a positive signal. Missing it doesn't directly deduct points under this id — it typically shows up as a deduction under the related failing rule instead.


present-referrer-policy

Referrer-Policy header is present

SeverityWeightCategory
Positive signal0 ptsSecurity Headers

What triggers it & why it matters: This rule only ever surfaces as a passing signal in the current source — it fires (as a pass) when: Referrer-Policy header is present and echoed back (truncated to 50 chars) in the report.. There is no separate failing issue() call under this exact id; the failure condition is the logical negation of the pass condition, and in most cases is covered by a related rule id documented elsewhere in this category (see the table above for a sibling rule on the same feature).

Effect on score: Meeting this condition costs nothing and confirms a positive signal. Missing it doesn't directly deduct points under this id — it typically shows up as a deduction under the related failing rule instead.


present-strict-transport-security

Strict-Transport-Security header is present

SeverityWeightCategory
Positive signal0 ptsSecurity Headers

What triggers it & why it matters: This rule only ever surfaces as a passing signal in the current source — it fires (as a pass) when: Strict-Transport-Security header is present and echoed back (truncated to 50 chars) in the report.. There is no separate failing issue() call under this exact id; the failure condition is the logical negation of the pass condition, and in most cases is covered by a related rule id documented elsewhere in this category (see the table above for a sibling rule on the same feature).

Effect on score: Meeting this condition costs nothing and confirms a positive signal. Missing it doesn't directly deduct points under this id — it typically shows up as a deduction under the related failing rule instead.


present-x-content-type-options

X-Content-Type-Options header is present

SeverityWeightCategory
Positive signal0 ptsSecurity Headers

What triggers it & why it matters: This rule only ever surfaces as a passing signal in the current source — it fires (as a pass) when: X-Content-Type-Options header is present and echoed back (truncated to 50 chars) in the report.. There is no separate failing issue() call under this exact id; the failure condition is the logical negation of the pass condition, and in most cases is covered by a related rule id documented elsewhere in this category (see the table above for a sibling rule on the same feature).

Effect on score: Meeting this condition costs nothing and confirms a positive signal. Missing it doesn't directly deduct points under this id — it typically shows up as a deduction under the related failing rule instead.


present-x-frame-options

X-Frame-Options header is present

SeverityWeightCategory
Positive signal0 ptsSecurity Headers

What triggers it & why it matters: This rule only ever surfaces as a passing signal in the current source — it fires (as a pass) when: X-Frame-Options header is present and echoed back (truncated to 50 chars) in the report.. There is no separate failing issue() call under this exact id; the failure condition is the logical negation of the pass condition, and in most cases is covered by a related rule id documented elsewhere in this category (see the table above for a sibling rule on the same feature).

Effect on score: Meeting this condition costs nothing and confirms a positive signal. Missing it doesn't directly deduct points under this id — it typically shows up as a deduction under the related failing rule instead.