Security
· 12 checks — HTTP headers, CSP, TLS handshake, and cookie hygiene rolled into one auditable list.FContent Security PolicyAction2 of 10 CSP checks passedFIX
'unsafe-inline' allows inline <script> tags, defeating CSP against XSS. Remove it and use nonces or hashes instead.
Unsafe value (unsafe-inline, unsafe-eval) in script-src defeats CSP's main protection — XSS injections can execute again.
Learn more ▾ ▴
unsafe-inline allows inline <script> tags; unsafe-eval allows eval() and similar. Both are necessary for some legacy code but explicitly dangerous. Migrate to nonces (per-page random tokens) or hashes (per-script SHA-256) instead.
Source: OWASP CSP / MDN
'unsafe-eval' allows eval() and similar functions, enabling code injection. Remove it.
Unsafe value (unsafe-inline, unsafe-eval) in script-src defeats CSP's main protection — XSS injections can execute again.
Learn more ▾ ▴
unsafe-inline allows inline <script> tags; unsafe-eval allows eval() and similar. Both are necessary for some legacy code but explicitly dangerous. Migrate to nonces (per-page random tokens) or hashes (per-script SHA-256) instead.
Source: OWASP CSP / MDN
A wildcard allows scripts from any origin, making CSP ineffective against XSS. Restrict to specific trusted origins.
script-src * defeats the entire point of CSP — any host can load scripts on your page.
Learn more ▾ ▴
A wildcard in script-src (or its absence with no default-src) lets any origin host scripts your page will execute. The CSP header is present but provides no XSS protection. Replace with an explicit allowlist (your own domain plus specific CDN hosts) or use nonces/hashes for inline scripts.
Source: MDN CSP / OWASP
Without base-uri, attackers can inject a <base> tag to hijack relative URLs. Set it to 'self' or 'none'.
base-uri 'self'Missing base-uri in CSP leaves a base-tag injection attack path open even on otherwise strict policies.
Learn more ▾ ▴
A common omission: developers add CSP for script-src and frame-ancestors but forget base-uri. The result is a CSP that looks strict but lets an attacker rewrite every URL on the page via <base href>. Add `base-uri 'self'` to close the gap.
Source: MDN CSP
frame-ancestors controls who can embed your page, preventing clickjacking. Set it to 'self' or 'none'.
frame-ancestors 'self'Security gaps expose your site and users to attacks, eroding trust.
form-action restricts where forms can submit data, preventing form hijacking.
form-action 'self'Security gaps expose your site and users to attacks, eroding trust.
This directive upgrades HTTP resources to HTTPS automatically, preventing mixed content.
upgrade-insecure-requestsWithout upgrade-insecure-requests, any HTTP subresource link survives as a mixed-content warning instead of auto-upgrading.
Learn more ▾ ▴
Adding `upgrade-insecure-requests` to your CSP turns every http:// subresource fetch into https:// at the browser layer. One-line defense against accidental mixed content from legacy links or third-party widgets.
Source: MDN CSP
Parsed Policy
FSubresource IntegrityAction0 of 39 external resources have SRIFIX
| Tag | Domain | Integrity |
|---|---|---|
| <script> | cdn.confiant-integrations.net | ✗ Missing |
| <script> | launchpad.privacymanager.io | ✗ Missing |
| <script> | launchpad.privacymanager.io | ✗ Missing |
| <script> | pm-widget.taboola.com | ✗ Missing |
| <script> | gum.criteo.com | ✗ Missing |
| <script> | nr-events.taboola.com | ✗ Missing |
| <script> | c2.taboola.com | ✗ Missing |
| <script> | cdn.taboola.com | ✗ Missing |
| <script> | sb.scorecardresearch.com | ✗ Missing |
| <script> | oceancloudhosts.com | ✗ Missing |
| <script> | www.npttech.com | ✗ Missing |
| <link> | fonts.googleapis.com | ✗ Missing |
| <link> | dcs-static.gprod.postmedia.digital | ✗ Missing |
| <link> | dcs-static.gprod.postmedia.digital | ✗ Missing |
| <link> | dcs-static.gprod.postmedia.digital | ✗ Missing |
| <link> | dcs-static.gprod.postmedia.digital | ✗ Missing |
| <script> | fem.gprod.postmedia.digital | ✗ Missing |
| <script> | tags.qortex.ai | ✗ Missing |
| <script> | cdn-gateflipp.flippback.com | ✗ Missing |
| <script> | tags.qortex.ai | ✗ Missing |
| <script> | securepubads.g.doubleclick.net | ✗ Missing |
| <script> | 23dc09d6-b664-425a-a76e-0eed6a6cc102.edge.permutive.app | ✗ Missing |
| <script> | launchpad-wrapper.privacymanager.io | ✗ Missing |
| <script> | c.amazon-adsystem.com | ✗ Missing |
| <script> | fem.gprod.postmedia.digital | ✗ Missing |
| <script> | micro.rubiconproject.com | ✗ Missing |
| <script> | securepubads.g.doubleclick.net | ✗ Missing |
| <script> | config.aps.amazon-adsystem.com | ✗ Missing |
| <script> | launchpad-wrapper.privacymanager.io | ✗ Missing |
| <script> | secure.cdn.fastclick.net | ✗ Missing |
| <script> | tags.crwdcntrl.net | ✗ Missing |
| <script> | cdn.confiant-integrations.net | ✗ Missing |
| <script> | cdn.id5-sync.com | ✗ Missing |
| <script> | fem.gprod.postmedia.digital | ✗ Missing |
| <script> | ak.sail-horizon.com | ✗ Missing |
| <script> | pm-widget.taboola.com | ✗ Missing |
| <script> | auth.lrcontent.com | ✗ Missing |
| <script> | edge-auth.microsoft.com | ✗ Missing |
| <script> | dcs-static.gprod.postmedia.digital | ✗ Missing |
DEmail SecurityActionDMARC: noneFIX
This only monitors, it doesn't block spoofed emails. Change to p=quarantine or p=reject.
DMARC p=none collects reports but doesn't actually block spoofed mail — phishing emails still reach inboxes.
Learn more ▾ ▴
DMARC's three policies are p=none (monitor only), p=quarantine (mark as spam), and p=reject (bounce). Most domains start at p=none to gather data, but stay there forever, leaving spoofers unblocked. After 30 days of clean DMARC reports, graduate to p=quarantine, then p=reject.
Source: DMARC.org / NIST
Dsecurity.txtActionNo /.well-known/security.txt publishedFIX
security.txt
No security.txt found at /.well-known/security.txt
CPermissions-PolicyAction8 directives, 1 missingREVIEW
Raw Header
Feature Permissions
CCORS ConfigurationActionOrigin: *REVIEW
Any website can read responses from this resource.
| Header | Value | Status |
|---|---|---|
| Access-Control-Allow-Origin | * | ⚠ |
Origin reflection test
Some servers mirror the request Origin header, which can be exploited. Test manually:
curl -sI -H "Origin: https://evil.com" <url> | grep -i access-control
ASecurity Headers7 of 10 headers properly configuredPASS
Without includeSubDomains, subdomains can still be accessed over HTTP.
max-age=31536000; includeSubDomainsWithout includeSubDomains, a forgotten dev subdomain over HTTP can set malicious cookies that ride to the apex.
Learn more ▾ ▴
HSTS without includeSubDomains protects only the exact domain. Cookies set on a non-HSTS subdomain can ride to the apex via cookie-scope attacks. The fix is one directive append. Verify all subdomains support HTTPS first — adding includeSubDomains to a domain with HTTP-only subdomains breaks them.
Source: RFC 6797
COEP prevents loading cross-origin resources without explicit permission. Required for SharedArrayBuffer and high-resolution timers.
require-corpCOEP enforces that all embedded resources opt-in to cross-origin embedding — required for cross-origin isolation features.
Learn more ▾ ▴
Cross-Origin-Embedder-Policy: require-corp ensures every embedded resource (script, iframe, image) explicitly allows being loaded cross-origin. Combined with COOP, this enables the cross-origin-isolated context that unlocks SharedArrayBuffer, high-resolution timers, and other powerful APIs.
Source: MDN / web.dev
same-originCOOP is set to a less-restrictive value (same-origin-allow-popups or unsafe-none) — partial isolation only.
Learn more ▾ ▴
COOP: same-origin is the strictest level. same-origin-allow-popups allows authenticated popup windows back to your origin. unsafe-none is the legacy default (effectively off). Pick the strictest level your app's popup flows tolerate.
Source: MDN COOP
A+TLS & CertificatesTLS 1.3, 7 checks passedPASS
HTTP/2 provides multiplexing and header compression for better performance.
HTTP/1.1 forces the browser to make sequential requests, multiplying latency on every page.
Learn more ▾ ▴
HTTP/2 (and HTTP/3) multiplex many requests over a single connection, eliminating head-of-line blocking. HTTP/1.1 forces the browser to either queue requests or open many parallel connections — both worse. Most modern web servers support HTTP/2 with one config line.
Source: MDN Web Docs
Certificate Chain
A+JS Library VulnerabilitiesNo known vulnerabilitiesPASS
No known JavaScript library vulnerabilities detected.
A+Information LeakageNo exposuresPASS
No sensitive files exposed — all paths returned 404.
| Path | Status | Category | Risk |
|---|---|---|---|
| /.git/HEAD | ✓ Not found | Version Control | — |
| /.git/config | ✓ Not found | Version Control | — |
| /.svn/entries | ✓ Not found | Version Control | — |
| /.env | ✓ Not found | Configuration | — |
| /.env.local | ✓ Not found | Configuration | — |
| /.env.production | ✓ Not found | Configuration | — |
| /wp-config.php | ✓ Not found | Configuration | — |
| /.htaccess | ✓ Not found | Configuration | — |
| /phpinfo.php | ✓ Not found | Debug | — |
| /server-status | ✓ Not found | Debug | — |
| /server-info | ✓ Not found | Debug | — |
| /.well-known/security.txt | ✓ Not found | Security Policy | — |