CAI Technology
Menu ☰
aegis · · 5 min citire

X-Frame-Options + CSP frame-ancestors: protecție anti-clickjacking în 2026

Clickjacking permite atacatorului să transforme click-urile utilizatorilor voștri în acțiuni neautorizate. Două linii de header DNS și protejați aplicația.

CAI Technology · Ultima revizuire: 09.05.2026
X-Frame-Options + CSP frame-ancestors: protecție anti-clickjacking în 2026

Pe scurt

Clickjacking (UI redress attack) este atacul prin care un site malicios încarcă site-ul vostru într-un iframe transparent peste propriul conținut. Utilizatorul crede că dă click pe site-ul atacatorului, dar de fapt dă click în iframe-ul vostru — logout, transfer bani, share post, like, change settings — cu sesiunea sa autentificată.

Două headere blochează atacul:

Best practice: ambele setate, pentru maximum compat.

Atacuri concrete

Cazul “Win iPhone”

Atacatorul construiește un site fake cu un buton “Win iPhone — click here”. Peste buton, iframe transparent cu https://internetbanking.firma.ro/transfer (deschis dacă utilizatorul e autentificat la banking app în alt tab). Click → execută acțiune transfer cu sesiunea legitimă.

Like-jacking (social media)

Site-ul atacatorului are un buton “Play video”. Peste buton, iframe transparent cu butonul “Like” al unei pagini Facebook. Utilizatorul gândește că dă play, de fapt face like. Boost artificial, abuz brand.

Account takeover prin reset password

Atacator iframe-ează firma.ro/account/security cu butonul “Adaugă email recuperare”. Utilizatorul cu sesiune activă, fără să știe, adaugă email-ul atacatorului → reset password ulterior trimite la atacator.

Protecția modernă: CSP frame-ancestors

Content-Security-Policy: frame-ancestors 'none';

Niciun site nu vă poate încărca în iframe. Recomandare default pentru aplicații sensibile (banking, admin panels).

Pentru aplicații care permit iframe pe propriul site:

Content-Security-Policy: frame-ancestors 'self';

Sau pentru parteneri specifici (ex: o platformă embed):

Content-Security-Policy: frame-ancestors 'self' https://partner.com;

Protecția legacy: X-Frame-Options

Pentru browser-e vechi care nu suportă CSP frame-ancestors (foarte rare în 2026):

X-Frame-Options: DENY

Sau:

X-Frame-Options: SAMEORIGIN

X-Frame-Options are 2 limitări față de CSP:

  1. Nu acceptă liste multiple de origini (doar DENY sau SAMEORIGIN sau ALLOW-FROM <single>)
  2. ALLOW-FROM nu e suportat de Chrome / Safari

→ Folosiți CSP frame-ancestors ca primary, X-Frame-Options ca fallback.

Implementare pas-cu-pas

Pas 1 — Identificați aplicații care nu trebuie iframe-uite

Banking apps, admin panels, dashboards utilizator, formulare de plată, OAuth flows — toate trebuie frame-ancestors 'none'.

Pas 2 — Setați header-ul global pe răspunsurile HTML

nginx:

add_header Content-Security-Policy "frame-ancestors 'none'" always;
add_header X-Frame-Options "DENY" always;

Apache:

Header always set Content-Security-Policy "frame-ancestors 'none'"
Header always set X-Frame-Options "DENY"

Caddy:

header Content-Security-Policy "frame-ancestors 'none'"
header X-Frame-Options "DENY"

Express (Node.js):

app.use(helmet.frameguard({ action: 'deny' }));
app.use(helmet.contentSecurityPolicy({ directives: { 'frame-ancestors': ["'none'"] } }));

Pas 3 — Verificare

curl -I https://firma.ro | grep -i "x-frame\|frame-ancestors"

Test online: https://csp-evaluator.withgoogle.com/

Pas 4 — Pagini care permit iframe (excepții)

Dacă aveți pagini intentionate pentru iframe (widget-uri, embed-uri), pe acele pagini specifice setați:

Content-Security-Policy: frame-ancestors 'self' https://partner.com

În loc de 'none'. Granular per-route.

Confuzii frecvente

“X-Frame-Options e suficient — nu mai am nevoie de CSP.” — În 2026, browserele moderne (Chrome 90+, Firefox 90+) prioritează CSP frame-ancestors. X-Frame-Options rămâne backup.

frame-ancestors 'none' îmi rupe Stripe checkout.” — Nu. Stripe Checkout își încarcă propriile iframe-uri în pagina voastră — asta e protejat de frame-src, nu frame-ancestors. Diferență fundamentală.

“Clickjacking e o problemă veche, nu se mai practică.” — Greșit. În 2024-2025 au fost atacuri active de clickjacking pe wallet-uri crypto (MyEtherWallet 2024, MetaMask phishing). Vector activ.

Verificați acum

ARTEMIS detectează absența X-Frame-Options + CSP frame-ancestors în orice scanare Site la 2 EUR. Plus 36 alte verificări tehnice.


🔗 Soluții complementare CAI Technology


tehnic@caitech.ro

Începem cu o conversație de 30 de minute.

Audit AI-readiness gratuit pentru companii peste 50 angajați. Răspundem în 24 de ore.