Home / Knowledge hub / Clickjacking
Knowledge hub
Clickjacking
Tricking someone into clicking your button while it is hidden from them.
What it means
Clickjacking tricks somebody into clicking a button in your application by hiding it invisibly under something on an attacker's page. The victim sees a game, a video or a cookie banner. They click where they were led to click, and the click lands on your page, loaded transparently on top.
Because the user really is logged in, whatever that button does gets done, with their session and their permissions.
Dragging, keyboard tricks and overlaid input boxes are variations on the same idea.
Why it matters
The damage depends on what one click can do in your product. Approving a payment. Changing a permission. Accepting an invitation. Granting an integration access to an account.
It is rarely the most serious item in a report, and usually the cheapest to fix. That pairing is why it stays on the list. The effort runs to minutes while the failure runs to whatever your most powerful single click does.
Security reviews find it too. A customer's questionnaire asks whether you send framing protection, and an open answer costs meeting time on top of the risk.
How it shows up
One response header prevents it, and a new subdomain forgets it. The check is whether your pages load inside a frame on somebody else's site. You have to answer that for every hostname you serve, not the main one only.
Marketing sites, status pages and old internal tools are the usual gaps.
Then test it on a page that does something. A framed marketing page is a missing header. A framed page with one confirm button is a demonstration, and a confirmation step on important actions blunts it.
Questions people ask
Clickjacking, answered
Is clickjacking a real vulnerability, or just a report filler?
It is real, and it is often minor. The severity comes entirely from what one click does in your product. A click that confirms a payment matters. A click on a marketing page does not.
It also takes minutes to prevent, which is why it keeps turning up in reports. There is no good reason to leave it open.
A scanner says we are vulnerable. Does loading in a frame prove it?
Not quite. Framing shows the protection is missing. An exploit needs a page where a hidden click actually commits something.
Treat the scanner result as a missing header, then ask the second question. What could one click here do? That is what decides the severity.
Do I need framing protection on an API that returns JSON?
Not for this risk. There is nothing to click in a JSON response, so framing it gains an attacker nothing.
Scanners flag it anyway and the header costs nothing, so most teams send it everywhere and stop arguing about it.
How do I block framing but still let a partner embed our page?
Use the content security policy frame-ancestors directive and name the origins you allow. It takes a list, which the older X-Frame-Options header does not.
Keep the list short and review it. Every origin on it can frame your page.
Does our CSRF protection already cover clickjacking?
No. A CSRF token proves the request came from your own page, and in a clickjacking attack it did. The victim's real browser sends a real request from your real page.
PortSwigger draws the same distinction: clickjacking needs the user to click, and CSRF does not. Different problems, different fixes.
Related
Terms that sit next to this one
Content Security Policy
A header telling the browser which scripts a page may load.
CSRF
An attacker's page makes a logged-in user's browser act on your site.
XSS
An attacker's script running in your pages, in your customers' sessions.
Session hijacking
Stealing the token that tells your application a browser is logged in.
Can your pages load in a frame?
We check every hostname you serve, not only the main one, and show what a single hidden click could commit. Each finding comes with evidence a developer can act on the same day.
Or start with a $199 pilot on one application: thirty days, success criteria agreed before day one, credited against the annual if you convert.