EnforceCSP
Real Chromium. Real network requests.

What does your site actually load?

Enter a domain. EnforceCSP crawls its public pages in a headless browser, records every resource each page requests, and shows you the Content-Security-Policy those requests would need — and where your current policy already falls short.

A scan crawls up to 100 real pages, so it needs an account · reports stay private until you share them · already have one?

recommended-csp
# built only from what the browser was observed requesting
default-src 'self';
script-src  'self' https://cdn.example.com https://js.stripe.com;
style-src   'self' https://fonts.googleapis.com;
font-src    'self' https://fonts.gstatic.com;
img-src     'self' data:;
connect-src 'self' https://api.example.com;

HTML parsing lies. Browsers don't.

Modern applications inject most of their resources with JavaScript, so anything that only reads markup misses them. Every page is loaded in a real Chromium instance and every network request it makes is recorded.

  1. 1

    Crawl

    Starts at your homepage, follows internal links and the sitemap, and respects robots.txt. Subdomains are treated as separate sites.

  2. 2

    Observe

    Each page is loaded in headless Chromium. Scripts, styles, images, fonts, XHR, WebSockets and frames are all captured from the network layer.

  3. 3

    Normalize

    Every request is reduced to an origin and mapped onto the CSP directive that governs it.

  4. 4

    Report

    You get the origins grouped, the policy you have today, and the policy your traffic actually needs.

Every origin, grouped

Not thousands of URLs — the handful of origins that matter, with the resource types seen on each and how many pages loaded from them.

Origin Types Pages
cdn.example.com JS CSS 23
js.stripe.com JS Frame 4
fonts.gstatic.com Font 12
api.example.com Fetch 18

Potential mismatches

Already have a CSP? Every observed origin is checked against it, and anything the written policy doesn't appear to list is flagged.

script-src → https://js.stripe.com
not listed in current policy

Inline & eval detection

Inline scripts, inline styles and eval() are reported so you can plan nonces or hashes. They never silently become 'unsafe-inline'.

What this is

  • A discovery tool for the resources your public pages load
  • A deterministic transformation: observed requests to CSP directives
  • A starting point you test in report-only mode

What this is not

  • A vulnerability scanner or penetration-testing tool
  • A violation-report collector — nothing here proves a browser blocked a request
  • A guarantee: pages behind a login or user interaction are not observed

Outbound requests are checked before they are made: private, loopback, link-local and reserved addresses are refused, and every redirect hop is re-checked.