Supply-chain security
Every script your visitors run, and what's inside it.
Your firewall never sees the third-party scripts in your visitors' browsers. We do: every script, its library and version, and the moment one changes or picks up a CVE.

0 scripts added
Browsers report natively
Real visitor traffic
Not a crawler snapshot
CVE detection
Fingerprinted from content
EU data residency
France, on OVH
The threat
The breach that never touches your server.
In a client-side supply-chain attack, the vendor gets compromised and your page delivers the payload. Your servers stay clean, your logs stay quiet, and the damage happens in your visitors' browsers. Three incidents, three routes in.
Polyfill.io, 2024
The polyfill.io domain changed hands in February. By June, the CDN behind it was injecting malicious redirects into pages on 100,000+ websites that embedded one script tag. The code dodged admin users and analytics tools, so sites that only tested their own pages saw nothing.
Sansec's reportBritish Airways, 2018
Magecart attackers edited roughly 22 lines of a Modernizr file on ba.com. For 15 days, every payment form fed cards to an attacker domain. About 400,000 customers were hit; the ICO fine closed at 20 million pounds.
The ICO's penalty noticenpm chalk and debug, 2025
18 packages with 2.6 billion combined weekly downloads shipped malicious versions after one maintainer got phished. The payload ran in end users' browsers, hooking fetch and wallet APIs. Every build-time check passed at install; the attack ran after the build.
Aikido's write-up
How it works
One response header in. Every script accounted for.
No agent to load, no proxy in your delivery path, no robot visiting your site. Your real visitors' browsers are the sensors.
01 - Collect
Browsers report every script they run
Add one response header. From then on, real visitors' browsers report the URL and hash of every script your pages execute: first-party, third-party, and the tag your tag manager loaded last night.
02 - Analyze
We identify what's inside each script
Each script's content is fingerprinted and analyzed to identify the library, framework or vendor behind it, and its version. That identity is checked against known CVE databases and lifecycle status: outdated, unmaintained, end-of-life.
03 - Act
Changes and CVEs become alerts
A new script, a changed hash, a new outbound origin or a fresh CVE pings Slack, Teams, Google Chat, Telegram or email as browsers report it. Fix the finding, or block the vector with a CSP built from the same reports.
An inventory built by your real traffic.
Skimmers cloak: they fire on real checkouts in real sessions and stay dormant for crawlers and sandboxes. CentralCSP's inventory comes from what actual visitors' browsers executed, so a script that only misbehaves in production is still on the list.
- First-party and third-party scripts, per page
- Last-seen times from live traffic
- New scripts flagged the moment they appear
A CVE in a marketing tag is still your CVE.
Knowing a script's filename tells you nothing about the jQuery inside it. CentralCSP fingerprints each script's content, resolves the library and version it contains, and holds it against CVE databases and maintenance status. You patch the vulnerable version before someone else finds it first.
- Content fingerprinting, not just URL matching
- Known CVEs matched to the exact version
- End-of-life and unmaintained versions flagged
The SBOM your build pipeline can't produce.
Your CI scans what's in the repo. The tag manager's payload, the chat widget and the analytics snippet never pass through it, and the npm compromise of September 2025 cleared every build-time check before doing its damage in browsers. This SBOM lists what actually ran client-side.
- Technologies and versions from live pages
- Covers scripts that never touch your repo
- Export it for security reviews and audits
Data leaving the page is a report, not a mystery.
Web skimming has two tells: a file that changed, and data flowing to an origin you never approved. Browsers can report both. An integrity violation fires when a script stops matching its SRI hash; a connection report fires when the page talks to an undeclared origin.
- Outbound connections to unknown origins reported
- SRI mismatches reported by the browser itself
- Hash changes tracked script by script
Prevention
Detection tells you. Configuration stops it.
The same reports that build your inventory harden your policy: lock down what can load and where data can go, then let the browser enforce it.
A CSP from real traffic
The CSP builder turns collected reports into a policy that fits your site: script sources locked to what you actually use, connect-src and form-action closed to unknown origins, so a skimmer has nowhere to send the data.
- Built from production reports
- Exfiltration destinations locked down
- Report-only first, enforce when clean
Integrity on your assets
Pin your static scripts with Subresource Integrity and a swapped file refuses to run. Browsers report every mismatch, so tampering surfaces even where you can't pin.
- SRI hashes generated in seconds
- Integrity violations reported live
- Covers the polyfill.io failure mode
Headers graded continuously
The free scanners grade your CSP and security headers like an attacker reads them: which origins may run code, which destinations may receive data, what reporting you'd have during an incident.
- CSP and header scanning
- Reporting setup verified
- Free, no account needed
Approaches
Three ways to watch your scripts.
Every client-side security product answers one question differently: what do you have to add to your site to get visibility? Here is the honest comparison the vendors skip.
| CentralCSP | Injected agent | Proxy delivery | |
|---|---|---|---|
| Adds nothing to your page | Yes: Nothing, a header | No: Its own script | No: A proxy in the path |
| Sees real visitor sessions | Yes: Every browser reports | Yes: While its script runs | Partially: Proxied traffic only |
| Catches cloaked skimmers | Yes: Fires on real checkouts | Partially: Unless evaded first | Partially: If payload inspected |
| Blocks malicious scripts inline | Partially: Via your CSP | Yes: In-browser blocking | Yes: Blocks at the edge |
| Adds no page weight or latency | Yes: Zero bytes added | No: Runs on every page | No: Latency per fetch |
| Adds no new attack surface | Yes: Never in the page | No: One more third party | No: It serves your code |
Check your exposure
How exposed is your site right now?
Two minutes: see which origins can run code on your pages today, and whether you would even hear about it when one goes bad.
Free, no account needed. Results land on a shareable page.
Trusted by teams across the world
Taking payments? This is now mandatory.
Since March 2025, PCI DSS v4 requires a justified inventory of every payment page script (6.4.3) and alerts on unauthorized changes (11.6.1). That is this page's feature set, pointed at your checkout, with the evidence exports your assessor asks for.
See PCI DSS evidence- Script inventory with justifications
- Change and tamper alerts
- CSV and PDF evidence exports
- SBOM for the assessor
FAQ
Frequently asked questions
Client-side supply-chain attacks and how we catch them, answered.
Find out what your pages ran today.
Add the header this afternoon and the inventory builds itself from your next visitors. Free trial, no agent, no proxy, no code change.
