b2KIT

X-Frame-Options & Clickjacking Tester

Test X-Frame-Options and CSP frame-ancestors directives. Demonstrate clickjacking attacks and defenses.

Tested tool guide Tested browser tools Checked August 16, 2026

What X-Frame-Options & Clickjacking Tester does, with a checked example

This tool checks whether a page can be loaded inside an iframe and shows what stops it. Paste the X-Frame-Options and Content-Security-Policy header values from a page's response and it parses each directive - DENY, SAMEORIGIN, or the retired ALLOW-FROM syntax, plus frame-ancestors source lists - and flags anything obsolete or contradictory. It can also embed a URL live in an on-page iframe with a decoy click target, so you watch the browser itself allow or refuse the frame. The recurring surprise: ALLOW-FROM still turns up in header configs, but every current browser ignores it outright, leaving the page unprotected by that line alone.

Worked example

A concrete input and expected output from the current implementation.

Input

X-Frame-Options: ALLOW-FROM https://partner.example.com

Expected output

Flagged as obsolete: modern browsers (Chrome, Firefox, Safari, Edge) ignore the ALLOW-FROM directive entirely and treat the header as if it were absent. This header provides no framing protection in any current browser. Replace it with a Content-Security-Policy frame-ancestors directive, e.g. frame-ancestors 'self' https://partner.example.com.

MDN's X-Frame-Options reference documents ALLOW-FROM as obsolete and states that current browsers no longer support it, so a page relying on it alone is framable by anyone.

How the result is produced

1

Header directive parser

Paste one or more response header lines - X-Frame-Options and/or Content-Security-Policy. The tool reads the X-Frame-Options value (DENY, SAMEORIGIN, or ALLOW-FROM) and any frame-ancestors source list, flags ALLOW-FROM as obsolete since modern browsers ignore it outright, and lists which origins the pasted policy would actually permit to frame the page.

2

Live iframe embed demo

Enter a URL and the tool renders it inside a real iframe on the page, with a decoy button overlaid on the invisible target to mimic a clickjacking overlay attack. Because cross-origin JavaScript cannot read another origin's response headers, this test relies on the browser's own frame-blocking enforcement rather than an inspected header - a blocked page simply renders blank.

Good uses

  • confirming a site's SAMEORIGIN or frame-ancestors policy actually blocks framing before shipping it to production
  • building a live clickjacking proof-of-concept against a target missing these headers, for a pentest report or bug bounty writeup
  • figuring out why a page that used to embed fine in an internal dashboard iframe suddenly stopped loading, by checking its current header values

Limits and checks

  • The live embed test only shows behavior on this tool's own origin - a SAMEORIGIN policy will correctly block or allow framing here, but that doesn't confirm whether some other origin your policy is meant to stop would also be blocked.
  • The header parser only evaluates what you paste in; it can't fetch a live URL's headers itself, since cross-origin JavaScript can't read another site's response headers, so stale or mistyped header text produces a wrong verdict with no warning.
  • A blank or failed iframe in the live demo doesn't distinguish a framing block from a network error, a login redirect, or a page that refuses to render in a frame for unrelated reasons - check the browser console for the actual refusal message.

Common questions

Can this tool fetch and check the real X-Frame-Options header from any URL I type in?

No. A browser script can't read another origin's response headers unless that origin explicitly exposes them via CORS, which security headers never are. Paste the header value from your server config, curl -I, or your browser's network tab instead, and the tool evaluates that pasted text.

Is ALLOW-FROM still worth setting alongside X-Frame-Options SAMEORIGIN for older browser support?

No - per MDN, modern browsers ignore ALLOW-FROM completely rather than falling back to it, so it adds no protection today. Use a CSP frame-ancestors directive for anything beyond same-origin framing; there's no current browser where ALLOW-FROM is the deciding factor.

References and verification

The example and behavioral notes were checked against the browser implementation. Standards and primary references below define the relevant format, formula, or platform behavior.

Related Tools