Digital exposure report
example.com
Critical findings in the observed public configuration. Some basic protections were not detected.
Scanned: 2026-11-11 08:39 UTC
Partial coverage: the score is based on 95% of applicable check weight. 1 unverified check(s) are excluded, not counted as failures.
What to do first
- 1.
Tell browsers to always use the secure version
Helps browsers use HTTPS on future visits after they have received the policy.
Who can fix it: Your web host
How to verify after the fix
curl -sIL https://example.com/ | grep -i "Strict-Transport-Security"
- 2.
Limit what scripts your pages are allowed to run
This adds one layer of protection against injected scripts.
Who can fix it: Your website developer or web host
How to verify after the fix
curl -sIL https://example.com/ | grep -i "Content-Security-Policy"
A starting point, not a security guarantee.
What this grade means
- Tested hostname
- example.com
- Website request
- GET https://example.com/
- Scan time
- 2026-11-11 08:39:29 UTC
- Grading method
- Version 2How grading works
- Unverified or excluded checks
- DKIM — digital signature on email · Not detected (common selectors only)
This is a snapshot of the public configuration checks listed in this report. It does not verify the site's owner, business legitimacy, application security, or absence of vulnerabilities. It is not a security certification.
Score by category
| Email security | 24/25 | Spoofing email from this domain is hard. |
| Encryption & certificate | 18/25 | Encryption is in place, but a gap could expose users. |
| Browser protections | 0/30 | Several browser hardening headers are missing, which removes layers of protection against script injection and framing. |
| DNS infrastructure | 10/15 | The domain's infrastructure works, but recommended hardening is missing. |
Fix priorities
- 1.HighHSTS — enforce encryption in the browser · Hardening gap+8
- 2.HighHTTP → HTTPS redirect · Hardening gap+7
- 3.MediumClickjacking protection · Hardening gap+5
- 4.MediumCSP — protection from script injection · Hardening gap+8
- 5.LowCAA — who may issue certificates · Hardening gap+5
- 6.LowX-Content-Type-Options · Hardening gap+4
- 7.LowReferrer-Policy · Hardening gap+3
- 8.LowPermissions-Policy · Hardening gap+2
- 9.LowDMARC — anti-spoofing policy · Hardening gap+1
To verify
Couldn't be confirmed from public data, so excluded from the score. Checking them clarifies your posture; it doesn't guarantee a score change.
- DKIM — digital signature on email
Findings
SPF — who may send mail for the domain
Passed · Severity: OK · 10/10An authorized sender list is defined and mail from other servers is rejected.
Valid SPF record with -all. 0 of the 10 allowed DNS lookups.
v=spf1 -all
$ dig +short TXT example.com
DMARC — anti-spoofing policy
Needs attention · Severity: Low · Hardening gap · 14/15Forged email in the company's name is blocked by mail servers.
Policy p=reject. No rua — no reports on spoofing attempts are received.
v=DMARC1;p=reject;sp=reject;adkim=s;aspf=s
$ dig +short TXT _dmarc.example.com
- Keep your current p=reject enforcement and edit the existing record in place — do not replace it with p=none.
- Add rua=mailto:… to the existing record so you receive aggregate reports. Nothing else changes.
_dmarc.example.com. TXT "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s; rua=mailto:dmarc@example.com"
Safety: DNS changes are made only at your DNS provider. This tool only reads public data and changes nothing on the domain. Your domain already enforces DMARC. Edit the record in place; never roll back to p=none.
DKIM — digital signature on email
Not detected (common selectors only) · Severity: OK · Not scoredNo DKIM key was found under the common selectors we probed. That doesn't mean DKIM is missing — selectors can't be listed from public DNS. Not scored.
A missing name for a probed selector (NXDOMAIN/NODATA) only means that selector isn't published. DKIM is marked unverified and excluded from the score. Check a sent message's Authentication-Results for dkim=pass and its s= selector.
Selectors checked: google, selector1, selector2, default, k1, s1, s2, dkim, mail, smtp — no key found google._domainkey: answer selector1._domainkey: answer selector2._domainkey: answer default._domainkey: answer k1._domainkey: answer s1._domainkey: answer s2._domainkey: answer dkim._domainkey: answer mail._domainkey: answer smtp._domainkey: answer
$ dig +short TXT google._domainkey.example.com
MX — inbound mail routing
Info · Severity: OK · unscoredThe domain publishes a Null MX: it declares that it accepts no email.
MX 0 . (RFC 7505) declares no inbound mail. It doesn't prove no mail is sent and is not a substitute for SPF or DMARC.
0 .
$ dig +short MX example.com
HTTPS available
Passed · Severity: OK · 10/10The site loads over an encrypted connection.
https://example.com/ returned HTTP 200 (final URL: https://example.com/). Client-side certificate validation passed.
HTTP 200 Final URL: https://example.com/
$ curl -sIL https://example.com/
HTTP → HTTPS redirect
Failed · Severity: High · Hardening gap · 0/7The site is also reachable over an unencrypted connection, so data may travel in plain text on public networks.
http://example.com/ returned HTTP 200 without redirecting to https://.
HTTP 200 Location: (none)
$ curl -sI http://example.com/ | grep -iE "^(HTTP|location)"
- Set up a permanent (301) redirect from every HTTP request to HTTPS on the server or CDN.
- Then add an HSTS header.
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}Safety: This change is made on your server. Make sure HTTPS works first, otherwise the site won't load.
SSL/TLS certificate validity
Passed · Severity: OK · 8/8The certificate was accepted by a validating TLS client at scan time.
Live TLS handshake succeeded. Latest issuance in CT logs: SSL.com, expiring 2026-12-25 (44 days). CT shows issued certificates, not necessarily the one served — confirm dates with the verify command.
Live TLS handshake: certificate accepted CT logs (context only, not scored): Issuer: SSL.com Valid from: 2026-09-26 Valid until: 2026-12-25 Names: *.example.com, example.com Based on Certificate Transparency logs; may not reflect the certificate currently served.
$ echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -issuer -dates
HSTS — enforce encryption in the browser
Failed · Severity: High · Hardening gap · 0/8Browsers aren't told to always use an encrypted connection, enabling interception attacks on public networks.
No Strict-Transport-Security header. Users are exposed to SSL stripping on the first request.
Strict-Transport-Security: (missing)
$ curl -sIL https://example.com/ | grep -i "Strict-Transport-Security"
- Start with a short max-age (300 seconds) and make sure every subdomain works over HTTPS.
- Gradually raise it to 31536000 (one year) and add includeSubDomains.
- Consider preload only once the policy is stable — removal from the preload list is slow.
/* Strict-Transport-Security: max-age=31536000; includeSubDomains
Safety: This change is made in your server/CDN settings. Test on staging before production. HSTS is cached in the visitor's browser — a long max-age on a site without working HTTPS will block access.
CSP — protection from script injection
Failed · Severity: Medium · Hardening gap · 0/8Missing Content-Security-Policy header: this removes one layer of protection against script injection.
No Content-Security-Policy header found.
Content-Security-Policy: (missing)
$ curl -sIL https://example.com/ | grep -i "Content-Security-Policy"
- First publish Content-Security-Policy-Report-Only — it blocks nothing, it only reports.
- Collect violations for a week or two and tune the policy to your legitimate sources.
- Switch to the Content-Security-Policy header and replace 'unsafe-inline' with a nonce or hash.
/* Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'
Safety: This change is made in your server/CDN settings. Test on staging before production. An overly strict CSP will break scripts — that's why you start in Report-Only mode.
Clickjacking protection
Failed · Severity: Medium · Hardening gap · 0/5Missing X-Frame-Options / frame-ancestors: this removes one layer of protection against clickjacking.
No valid X-Frame-Options and no frame-ancestors in the CSP.
X-Frame-Options: (missing)
$ curl -sIL https://example.com/ | grep -i "X-Frame-Options"
- Add X-Frame-Options: SAMEORIGIN (or DENY if the site is never embedded anywhere).
- Also set frame-ancestors in the CSP — the modern alternative.
/* X-Frame-Options: SAMEORIGIN
Safety: This change is made in your server/CDN settings. Test on staging before production. If partners embed the site in an iframe, add them to frame-ancestors instead of using DENY.
X-Content-Type-Options
Failed · Severity: Low · Hardening gap · 0/4The browser may interpret files as code unintentionally.
Missing X-Content-Type-Options: nosniff header (MIME sniffing).
X-Content-Type-Options: (missing)
$ curl -sIL https://example.com/ | grep -i "X-Content-Type-Options"
- Add X-Content-Type-Options: nosniff to every response.
/* X-Content-Type-Options: nosniff
Safety: This change is made in your server/CDN settings. Test on staging before production.
Referrer-Policy
Failed · Severity: Low · Hardening gap · 0/3Internal URLs (including parameters) may leak to external sites.
Referrer-Policy is missing; the browser will use its default.
Referrer-Policy: (missing)
$ curl -sIL https://example.com/ | grep -i "Referrer-Policy"
- Set Referrer-Policy: strict-origin-when-cross-origin.
/* Referrer-Policy: strict-origin-when-cross-origin
Safety: This change is made in your server/CDN settings. Test on staging before production.
Permissions-Policy
Needs attention · Severity: Low · Hardening gap · 0/2Access to sensitive features like the camera and location isn't restricted.
Missing Permissions-Policy header.
Permissions-Policy: (missing)
$ curl -sIL https://example.com/ | grep -i "Permissions-Policy"
- Disable browser features the site doesn't need (camera, microphone, geolocation).
/* Permissions-Policy: camera=(), microphone=(), geolocation=()
Safety: This change is made in your server/CDN settings. Test on staging before production. Don't disable a feature the site actually uses.
Software version disclosure
Passed · Severity: OK · unscoredThe server doesn't disclose software versions.
No version numbers found in the Server / X-Powered-By headers.
server: cloudflare x-powered-by: (missing)
$ curl -sIL https://example.com/ | grep -iE "^(server|x-powered-by)"
DNSSEC — signed DNS records
Passed · Severity: OK · 7/7The domain's records are digitally signed and hard to forge.
An AD (Authenticated Data) flag was returned by a validating resolver.
AD = true
$ dig +dnssec example.com | grep -E "flags:.* ad"
CAA — who may issue certificates
Needs attention · Severity: Low · Hardening gap · 0/5Any certificate authority can issue a certificate for the domain, raising the risk of mis-issuance.
No CAA records found. RFC 8659 lets the domain owner restrict which CAs are authorized.
(no CAA records found)
$ dig +short CAA example.com
- Identify which certificate authority issued your current certificate (see the certificate check).
- Publish CAA for that authority only, and add iodef to receive alerts.
example.com. CAA 0 issue "letsencrypt.org" example.com. CAA 0 iodef "mailto:security@example.com"
Safety: DNS changes are made only at your DNS provider. This tool only reads public data and changes nothing on the domain. If your CDN issues certificates on your behalf, include it too — otherwise certificate renewal will fail.
DNS server redundancy
Passed · Severity: OK · 3/3The domain is served by several DNS servers, so one server failing won't take it down.
2 NS servers.
hera.ns.cloudflare.com elliott.ns.cloudflare.com
$ dig +short NS example.com
Indicative alignment
Best-practice mapping of public findings to common frameworks. Passive scanning tests public configuration only; it doesn't prove compliance or a violation.
- Google & Yahoo sender rules1 observed gaps · 1 unverified
- PCI DSS v4.04 observed gaps
- NIS2 / vendor due diligence3 observed gaps
- SOC 2 / ISO 27001 baseline5 observed gaps
Indicative alignment only, based on public configuration. It doesn't establish whether a framework applies to you, and it isn't legal advice, an audit or a certification.
Public DNS records
| A | example.com | 104.20.23.154 | 172.66.147.243 |
| AAAA | example.com | 2606:4700:10::6814:179a | 2606:4700:10::ac42:93f3 |
| MX | example.com | 0 . |
| NS | example.com | hera.ns.cloudflare.com | elliott.ns.cloudflare.com |
| TXT | example.com | v=spf1 -all | _k2n1y4vw3qtb4skdx9e7dxt97qrmmq9 |
| TXT | _dmarc.example.com | v=DMARC1;p=reject;sp=reject;adkim=s;aspf=s |
| CAA | example.com | — |
| DS | example.com | 2371 13 2 c988ec423e3880eb8dd8a46fe06ca230ee23f35b578d64e78b29c3e1c83d245a |