One of these sits between your visitors and your JavaScript
Report URI is a client-side security platform: your policy is enforced by the browser itself, which refuses what it disallows and records what it ran. A proxy takes the other position entirely: your scripts are re-pointed at the vendor, fetched and inspected on their infrastructure, and served on from there. That difference decides what each one can stop, what each one can see, and what your site now depends on.
By Scott Helme — CEO and Founder · 12 August 2026
Script delivery is untouched. The browser refuses what your policy disallows, reports what it ran, and verified copies of that code are archived.
Scripts are routed through the vendor's infrastructure, inspected server-side, and can be blocked before they reach the browser.
This page describes the proxy approach rather than any one vendor's implementation of it. Products change without notice, and a comparison that quotes a particular feature set is out of date the day it does. Architecture is the durable part, and it is also the part that decides what a tool is able to see and stop. Check the current state of anything you are evaluating for yourself.
To stop a script before it executes, something has to stand between the origin serving it and the browser running it. That capability and that dependency are the same architectural fact, and the diagram below is the whole comparison in one picture.
Your policy travels with the page, so the browser refuses unauthorised code at the moment it would have executed — and reports what it did. Nothing of ours is ever in the way of a page rendering.
Your third-party JavaScript is delivered through another company's infrastructure. That is what makes inline blocking possible, and it is also a new dependency in the path of your pages loading.
Structural consequences rather than a feature scorecard. Both approaches are legitimate; they optimise for different things.
| Consideration | Report URI | Proxy |
|---|---|---|
| Script delivery | Unchanged — scripts load from wherever they always did | Carried through their infrastructure |
| If the vendor is unavailable | Your site serves exactly as normal; reports queue up | Something in the path of your page is unavailable |
| Blocking | By the browser itself, under your enforcing policy | Inline, at the proxy, before the browser sees the code |
| Evidence of execution | What the browser actually ran, reported by the browser | What the proxy forwarded |
| Script payloads | Held, and hash-verified against the browser's own fingerprint | Held, having been fetched by the proxy |
| Coverage | Every real session, including authenticated pages and checkout | Scripts routed through the proxy |
| Scripts added later | Reported the first time a browser loads one, wherever it came from | Covered once someone remembers to re-point it |
| Deployment | One response header | Route your scripts through them |
The standard argument against anything built on browser reporting is that it sees policy violations but never script contents. That is a fair description of a plain CSP endpoint, and not a description of this one.
Browsers report a cryptographic fingerprint of every script they execute. We fetch that file, hash what we receive, and archive it only when the bytes match. The stored copy is therefore provably the code that ran on a real visitor's machine — a stronger artefact than a file fetched by a proxy or a crawler, which shows what an origin served that particular request.
Learn more about Script Vault →Blocking does not require a middleman. An enforcing Content Security Policy has the browser refuse unauthorised scripts outright; Integrity Policy requires that scripts carry integrity metadata; Permissions Policy withdraws capabilities entirely. All of it is enforced by the browser, which is closer to the visitor than any proxy can be.
Learn more about Content Security Policy →One header. No code. Nothing added to your site and nothing in front of it.
30-day free trial · One header · No code · Cancel anytime
Report URI has collected browser security telemetry since 2015. Have I Been Pwned has run on it for years, and our case studies cover several of the most examined client-side incidents in the industry — the British Airways and Ticketmaster Magecart attacks, the European Space Agency, and the cryptojacking compromises at the Information Commissioner's Office and the United States Courts.
The platform is built by people who work on the standards themselves, including Device Bound Session Credentials, passkeys and WebAuthn, with an open-source library published for the former.