HTTP security headers and grade
The response headers that tell a browser what to allow. Together they decide how much an injected script or a framing attack can actually do.
Security headers are instructions the server sends with every page. They do not fix bugs in your code; they limit what a bug can be used for. If an attacker manages to inject a script, a strict policy stops it loading code from elsewhere; if someone frames your site to trick clicks, the browser refuses to draw it.
How the grade is calculated
SiteScan reads the headers of the home page and grades six of them: Strict-Transport-Security, Content-Security-Policy, X-Content-Type-Options, X-Frame-Options, Referrer-Policy and Permissions-Policy. A header set correctly scores 2 points and is marked “Strong”; one that is present but too loose scores 1 and is “Weak”; a missing one scores 0. Out of 12 points, 11 or more earns an A, 9 a B, 7 a C, 5 a D, 3 an E, and anything below is an F.
Three more rows sit in this group without affecting the grade: HSTS preload, cross-origin reads (CORS) and the TRACE method.
Where to set them
Headers are added in the web server (add_header in nginx, Header always set in Apache), in the CDN's rules, or in the framework's middleware. Set them once for all responses, not page by page. The article on security headers has a ready-to-use set.
See this check on your own site
Run a free scan: the report shows this row for your domain along with the other checks of the site audit.
More in “Security headers”
What SiteScan checks
TLS certificate
- TLS certificate expiry
- Outdated TLS versions (TLS 1.0/1.1)
- TLS certificate chain
- TLS certificate issuer
- Certificate signature algorithm
Domain registration
- Domain registration expiry
- Registered domain name
- Domain registrar
- Domain registration date
- Domain last updated date
- Domain status codes (EPP)
- Domain transfer lock
- Registrar abuse contact
- RDAP and WHOIS data source
Indexing
- robots.txt file
- CSS and JS blocked in robots.txt
- XML sitemap
- Sitemap index file
- Off-domain URLs in the sitemap
- Sitemap lastmod dates
- Broken URLs in the sitemap
- RSS and Atom feed
Addresses & redirects
Security headers
- HTTP security headers and grade
- Strict-Transport-Security (HSTS) header
- Content-Security-Policy (CSP) header
- X-Content-Type-Options: nosniff
- X-Frame-Options and clickjacking
- Referrer-Policy header
- Permissions-Policy header
- HSTS preload list
- CORS and cross-origin reads
- HTTP TRACE method
Delivery & reputation
- Cache-Control header for HTML
- ETag and Last-Modified revalidation
- HTTP/3 and QUIC support
- Server version disclosure in headers
- DNS blocklist (DNSBL) check
Internal links
Exposure
- Exposed sensitive files (.env, .git, backups)
- Directory listing enabled
- Public JavaScript source maps
- Exposed WordPress endpoints
Well-known files
- security.txt file
- llms.txt for AI assistants
- llms-full.txt file
- ads.txt authorized sellers file
- humans.txt file
- Well-known change-password URL
DNS & email
- MX records (mail servers)
- SPF record
- DMARC record and policy
- DNSSEC signing
- CAA record
- Nameserver redundancy
- IPv6 support (AAAA record)
- MTA-STS policy
- TLS-RPT reporting record
- BIMI record (brand logo in email)
- Wildcard DNS record
- Dangling CNAME and subdomain takeover
Privacy & consent
- Analytics and tracking scripts
- Cookie consent banner
- Privacy policy link
- Terms of service link
- Imprint (Impressum)
- Accessibility statement
Core Web Vitals
- Lighthouse performance score
- Largest Contentful Paint (LCP)
- Cumulative Layout Shift (CLS)
- Interaction to Next Paint (INP)
- CrUX field data vs lab data