Client-side security, and why your existing tools miss it
If an attack can succeed without a single unusual request reaching your servers, nothing server-side can detect it. Card skimming works exactly that way. Here is what client-side security covers and where each control stops.
Start for free
Talk to an expert
TL;DR
Client-side security
THE DEFINITION
Protecting the part of your application that runs in the visitor's browser: the scripts on the page, what they do, and what they send.
WHY IT IS A GAP
WAFs, SIEMs and EDR all watch infrastructure you own. A skimmer reads the card in the browser and posts it straight to the attacker, so none of that traffic reaches you.
WHERE TO START
Inventory first. A CSP written without knowing what currently executes tends to be permissive enough to allow the thing you were worried about.
Short on time? PCI DSS 6.4.3 and 11.6.1 made the two core client-side controls mandatory on payment pages in March 2025. Requirement 6.4.3.
ON THIS PAGE
What is client-side security?
Client-side security is the practice of protecting the part of a web application that runs in the visitor's browser, covering the scripts that execute on the page, what those scripts do, and where they send data. It is a distinct discipline from server-side security because the events happen somewhere you do not control and the malicious traffic never reaches your infrastructure. A web application firewall inspects requests arriving at your application; a card skimmer posts stolen data from the customer's browser directly to the attacker's server, so there is nothing for the firewall to inspect. PCI DSS v4.0.1 requirements 6.4.3 and 11.6.1 codified two client-side controls as mandatory for payment pages from 31 March 2025.
Why the server-side stack is blind to client side security
You will see the term written both as client-side security and client side security, with and without the hyphen, and they mean the same thing. Security tooling grew up around traffic arriving at infrastructure you own. A WAF inspects requests to your application. A SIEM correlates logs your systems produced. An EDR agent watches your servers. Client-side attacks are outside all three, because the relevant events happen in a browser you do not own, on a page assembled from code written by several companies, and the malicious request goes directly from that browser to the attacker.

The exfiltration never touches your server, so a WAF never sees it. The request happens in the visitor's browser, which is the only place it can be observed.
The practical test: if an attack can succeed without a single unusual request reaching your servers, no server-side control can detect it. Card skimming passes that test, which is why it went from a niche technique to a mandatory PCI requirement in one standard revision.
What counts as a client-side attack
01
Card skimming
Reading payment fields and exfiltrating them. Called Magecart, web skimming, e-skimming or formjacking depending on who is describing it. Magecart protection
02
Credential harvesting
The same technique pointed at a login form instead of a payment form.
03
Data leakage to third parties
A script sending personal data somewhere your privacy notice does not mention. Usually a misconfiguration rather than an attack, and still a reportable problem.
04
Malicious redirects
Sending a slice of traffic to a page you do not control, often only on mobile or only for certain referrers.
05
Cryptojacking
Using visitor CPU to mine. Rarer now, and still seen on sites with weak tag governance.
06
Clickjacking and overlays
Drawing an invisible or convincing layer over the real interface, including over a payment iframe.
What actually runs on a page
Five kinds of script. First-party scripts served from your own origin, often bundling npm packages, CMS plugins or extensions. Inline scripts written into the HTML itself. Third-party scripts fetched from other domains. Scripts injected at runtime by a tag manager, which can load further scripts of their own. And scripts injected by visitors' browser extensions, which you never shipped at all.
Two properties make this hard to secure. Scripts are dynamic: the same URL can serve different code by browser, device or location, so what one visitor received is no proof of what another did. And most malicious code does not sit in the script you approved. It sits in something that script loads later, under conditions chosen to keep it away from anyone checking.
The controls, and where each one stops
Control
What it is good at
Where it stops
Content Security Policy
Restricting which origins may load scripts and receive data. Genuinely valuable and worth running
It governs origin, never behaviour. A compromised but allowed vendor passes cleanly
Subresource Integrity
Pinning the exact contents of a static file
Breaks whenever a vendor legitimately updates, so it is rarely used on third-party tags in production
External scanning
A quick outside-in inventory with no code change
Receives a datacentre view of the page, and targeted payloads are written not to fire for it
WAF
Attacks aimed at your application
Sees nothing that never reaches your application
Script monitoring from real sessions
Observing what actually executed, for every visitor, with integrity and behaviour
It is a client-side control. It says nothing about your servers, your network or your data at rest
See the client-side layer on your own checkout. Free forever on 1,000 page views a month.
Start for free
See pricing
Where to start if you have nothing today
Inventory first. Not because it is the most exciting control, but because every other decision depends on knowing what is currently executing. Teams that start by writing a CSP without an inventory usually end up with a policy so permissive it allows the thing they were worried about, because the policy was written to avoid breaking a page they could not fully see.
Frequently asked questions
Read the FAQ
No, it is a subset with a different threat model. Application security typically covers code you wrote and infrastructure you run. Client-side security covers code executing in a browser you do not own, much of it written by third parties, with the malicious traffic never touching your servers.
Partly, and it is a genuinely useful control. A Content Security Policy restricts which origins may load scripts and where data may be sent. It governs origin rather than behaviour, so a vendor you allowed who then gets compromised passes the policy cleanly. That is the most common attack route, so CSP alone leaves it open.
No, though payment pages carry the regulation. Any page that collects something valuable has the same exposure: login forms, account pages, health intake forms, insurance quotes. PCI DSS only mandates controls on payment pages, which is why that is where most programmes start.
This is genuinely unclear in most organisations, and the ambiguity is part of the problem. The scripts are added by marketing, the page is owned by ecommerce or web engineering, and the risk lands on security or compliance. Naming an owner is often the first real step.
It is the runtime half of it. Software supply chain security usually means dependencies you build into your application at compile time. Third-party scripts are dependencies you load at runtime, from servers you do not control, that can change contents without changing version or URL.
Three things: an inventory of what executes on sensitive pages, integrity pinned to the payload rather than the address, and an alert to a named human when either changes. That is close to what 6.4.3 and 11.6.1 require, which is not a coincidence.
Only the pages you choose. Scope is a set of URL patterns you define with selector rules, and nothing outside those patterns is monitored or counted. Most teams start with payment and login pages and widen later. You can run it sitewide if you want visibility into ad injection and third-party scripts across the whole estate, and then the whole estate is what is metered. The choice is yours and changing it is configuration, not reinstallation.
Start with the scripts already on your checkout.
Install the tag, mark your payment pages, and see the inventory fill in. Free forever on 1,000 page views a month, no credit card.
Free forever plan. No credit card.