Verificator iframe

Verificator iframe online gratuit: introdu orice adresă URL pentru a inspecta antetele X-Frame-Options și Content-Security-Policy frame-ancestors, află dacă pagina poate fi încorporată într-un iframe și confirmă prin intermediul unei previzualizări live. Istoricul se păstrează doar pentru sesiunea curentă a browserului.

Verificare încorporare IFrame

:

Rulează fiecare rând prin aceeași verificare a antetelor și îl adaugă la istoricul de sesiune de mai jos. Limitat la 20 adrese URL per lot, verificate câte câteva pe rând, pentru a fi respectuoase față de resursele site-urilor țintă.

Verificate: /
URL Rezultat HTTP

Previzualizare live

Inspectarea antetelor este o verificare rapidă inițială, dar nu poate detecta mecanismele JavaScript anti-frame (frame-busting): dacă antetele indică "Poate fi încorporat", dar previzualizarea rămâne goală, se scoate din cadru sau afișează o pagină de eroare, pagina nu poate fi încorporată în siguranță. Previzualizarea live reprezintă veredicul final.

Istoric (sesiunea curentă)

Salvat doar în această filă (sessionStorage); se șterge la închiderea acesteia. Nimic nu se transmite către server.

Nicio verificare înregistrată încă în această sesiune.

Cum funcționează verificarea

  1. Introdu adresa URL țintă și apasă Verifică. Serverul preia pagina ca pe o cerere reală de iframe (cu Sec-Fetch-Dest: iframe) și citește antetele de răspuns.
  2. Veredicul este stabilit în funcție de X-Frame-Options (DENY / SAMEORIGIN blochează încadrarea) și Content-Security-Policy frame-ancestors (doar `*` sau un wildcard de protocol permite orice sursă terță).
  3. Aceași adresă URL este încărcată în iframe-ul de previzualizare live, astfel încât să poți confirma modul exact în care reacționează browserul, inclusiv mecanismele JavaScript anti-frame pe care antetele nu le pot evidenția.

Ce determină dacă o pagină poate fi încorporată?

Faptul că o pagină web poate fi afișată într-un `<iframe>` pe un alt site este decis de browser, pe baza anteturilor de răspuns trimise de pagină. Verificatorul efectuează aceeași inspectare la nivel de server și îți oferă un rezultat instantaneu.

`X-Frame-Options` este antetul clasic: `DENY` interzice încorporarea pe toate paginile, `SAMEORIGIN` permite doar ca pagini din aceeași sursă să le încorporeze, iar `ALLOW-FROM` a fost eliminat din browserele moderne. Când antetul lipsește, regulile tradiționale nu blochează încorporarea.

`Content-Security-Policy frame-ancestors` este standardul modern. Listează originile autorizate să încorporeze pagina – de exemplu `frame-ancestors 'self' https://example.com`. Valoarea `*` (sau un protocol simplu precum `https:`) permite orice părinte HTTPS; orice altă valoare limitează încorporarea de către terți.

Anteturile nu spun totul: scripturile paginii pot executa cod anti-iframe (comparând `top !== self` și forțând o navigare la nivel maxim), iar paginile de login sau endpoint-urile restricționate geografic se pot comporta diferit pentru cererile din centre de date. De aceea, fiecare rezultat este însoțit de o previzualizare live.

Ghid rapid: configurarea antetelor de răspuns

Deții site-ul? Controlează încorporarea direct prin anteturile de răspuns.

Blochează încorporarea din orice pagină

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

Broerele refuză să redenă pagina în niciun iframe – cea mai strictă protecție împotriva clickjacking-ului.

Permite doar încorporarea din aceeași sursă

X-Frame-Options: SAMEORIGIN Content-Security-Policy: frame-ancestors 'self'

Doar paginile cu același protocol, domeniu și port pot fi încorporate; site-urile terțe sunt blocate.

Permite doar anumite origini

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

Adaugă originile de încredere în `frame-ancestors`; originile netotate vor fi blocate.

Permite încorporarea din orice pagină

Nu setați antetul X-Frame-Options Content-Security-Policy: frame-ancestors *

Orice site poate încorpora pagina într-un iframe. Analizează implicațiile asupra securității.

Notă: X-Frame-Options a fost înlocuit de directiva CSP `frame-ancestors`. Când ambele sunt prezente, CSP prevalează – preferă `frame-ancestors`.

Cum detectează serverul că o cerere provine dintr-un iframe?

Din jurul anului 2020, browserele bazate pe Chromium și Firefox atașează automat un set de anteturi Fetch Metadata la fiecare cerere de navigare și de subresurse. Cea mai utilă pentru verificările de încorporare este `Sec-Fetch-Dest` – îl informează pe server despre contextul care a solicitat resursa, fără a necesita nicio acțiune din partea paginii sursă.

  • Sec-Fetch-Dest: document — navigare la nivel maxim, nu este încărcat în niciun cadru.
  • Sec-Fetch-Dest: iframe — cererea este încărcată în interiorul unui element `<iframe>`.
  • Sec-Fetch-Dest: frame — încărcat în interiorul unui `<frame>` tradițional (frameset).
  • Sec-Fetch-Dest: embed / object — încărcat în interiorul unui element `<embed>` sau `<object>`.

Acest verificator trimite propria sa solicitare de test cu Sec-Fetch-Dest: iframe, replicând exact ceea ce trimite un browser real atunci când încorporează o pagină — astfel, rezultatul reflectă modul în care serverul țintă se comportă de fapt pentru cereri reale de iframe, nu doar o simplă solicitare generică fetch.

Sec-Fetch-Dest este un semnal util, dar nu reprezintă o frontieră de securitate: este transmis doar de browserele moderne, iar clienții non-browser — cum ar fi curl, roboții (bots), anumite vizualizări web (webviews) și browsere mai vechi — îl pot omite complet sau pot trimite o valoare arbitrară. Un server poate utiliza acest antet pentru jurnalizare sau pentru aplicarea rate-limiting, dar nu ar trebui să se bazeze exclusiv pe el pentru a decide dacă integrarea într-un iframe este sigură; această decizie revine totuși în sarcina lui X-Frame-Options și a CSP frame-ancestors, care sunt aplicate de către browsere independent de anteturile cererii.

Din partea clientului, o pagină poate detecta, de asemenea, că rulează în interiorul unui cadru fără niciun antet specific, de exemplu comparând `window.top !== window.self` (sau citind `window.frameElement` pentru cadre din aceeași sursă) și apoi acționând corespunzător — afișând un avertisment sau impunând o redirecționare la nivel superior (top-level). Aceasta este tehnica de protecție împotriva încadrării (frame-busting) menționată anterior și funcționează indiferent de ce valori conțin anteturile cererii.

Exemple de configurare server: blocarea încorporării iframe

Fragmentele de cod de mai jos arată cum să configurezi fiecare server sau framework pentru a bloca complet încorporarea în iframe (`X-Frame-Options: DENY` + `CSP frame-ancestors 'none'`) – cea mai restrictivă opțiune din ghidul rapid de mai sus.

server {
    location / {
        add_header X-Frame-Options "DENY" always;
        add_header Content-Security-Policy "frame-ancestors 'none'" always;
    }
}
<IfModule mod_headers.c>
    Header always set X-Frame-Options "DENY"
    Header always set Content-Security-Policy "frame-ancestors 'none'"
</IfModule>
app.use((req, res, next) => {
  res.setHeader('X-Frame-Options', 'DENY');
  res.setHeader('Content-Security-Policy', "frame-ancestors 'none'");
  next();
});
// next.config.js
module.exports = {
  async headers() {
    return [
      {
        source: '/:path*',
        headers: [
          { key: 'X-Frame-Options', value: 'DENY' },
          { key: 'Content-Security-Policy', value: "frame-ancestors 'none'" },
        ],
      },
    ];
  },
};
class SetFrameOptions
{
    public function handle(Request $request, Closure $next): Response
    {
        $response = $next($request);
        $response->headers->set('X-Frame-Options', 'DENY');
        $response->headers->set('Content-Security-Policy', "frame-ancestors 'none'");

        return $response;
    }
}
export default {
  async fetch(request) {
    const response = await fetch(request);
    const headers = new Headers(response.headers);
    headers.set('X-Frame-Options', 'DENY');
    headers.set('Content-Security-Policy', "frame-ancestors 'none'");
    return new Response(response.body, { status: response.status, headers });
  },
};

Ai nevoie doar să permiți site-ul tău sau o listă scurtă de permise să încorporeze pagina, în loc să blochezi pe toată lumea? Înlocuiește `DENY` cu `SAMEORIGIN`, iar `'none'` cu `'self'` sau o listă explicită de origini – restul configurației rămâne neschimbat.

Capcane / aspecte cunoscute ale platformelor

Indiferent de regulile generale ale antetelor, câteva platforme bine cunoscute au particularități proprii — aspecte pe care merită să le cunoști înainte de a presupune automat „Bloca” sau „Integrabil” bazându-te strict pe antete.

Platformă \/ scenariu Comportament Motiv
Pagina de vizionare YouTube (youtube.com\/watch) Bloca Folosește în schimb URL-ul oficial al player-ului youtube.com\/embed\/{id} — pagina standard de vizionare trimite o politică restrictivă pentru integrare în iframe.
Pagina localizării Google Maps Bloca Doar URL-ul iframe din API-ul Maps Embed (google.com\/maps\/embed) este conceput pentru a fi integrat în alte site-uri.
Pagini de autentificare OAuth (Google \/ Microsoft) Bloca Blicate intenționat din 2015 pentru a preveni furtul datelor de autentificare (credential phishing) în cadrul iframelor; fluxul de login trebuie să ruleze într-o fereastră principală sau pop-up.
Pagini de finalizare a plății (Stripe Checkout, PayPal, majoritatea gateway-urilor bancare) Bloca Integrarea formularului de plată într-un iframe reprezintă un vector clasic de clickjacking, așa că procesatoarele de plăți o refuză categoric.
Pagini de repository \/ fișier GitHub Bloca Politica globală a site-ului setează `frame-ancestors` pe `'none'`; folosește în schimb API-ul REST\/GraphQL sau o captură de ecran, în loc de un iframe.
Pagini „Publicare pe web” Notion \/ Google Docs Integrabil Concepute explicit pentru integrare, iar produsele oferă deja cod de embed pregenerat.
Articole Wikipedia Integrabil Nu există X-Frame-Options\/CSP restrictive implicit, dar verifică termenii de licențiere și atribuire înainte de a realiza integrări la scară largă.

Scenarii frecvente de utilizare

  • Decide dacă un widget, un panou de control sau un document terț poate fi integrat în produsul tău înainte de a scrie codul de integrare.
  • Verifică faptul că site-ul tău transmite politica X-Frame-Options sau CSP frame-ancestors pe care ai configurat-o inițial.
  • Debugați protecția împotriva clickjacking-ului: înțelegeți de ce o pagină afișează `about:blank` sau un mesaj de refuz într-un iframe.
  • Analizați în lot URL-urile candidate în timpul agregării conținutului sau a integrării unui portal, folosind istoricul sesiunii pentru a revedea rezultatele.
  • Pregătiți-vă pentru audituri de securitate sau teste de penetrare documentând politica de utilizare a iframelor pentru dependențele externe.

Întrebări frecvente (FAQ)

De ce rămâne goală o pagină marcată ca „Încorporabilă” în previzualizare?
Anteturile de răspuns permit utilizarea în iframes, dar pagina conține probabil scripturi anti-framare (frame-busting), necesită autentificare sau cookie-uri, sau returnează conținut diferit în funcție de vizitator. Aveți încredere în previzualizare.
Pot să ocoluiesc X-Frame-Options sau CSP?
Nu. Aceste anteturi sunt impuse de browser din motive de securitate (protecție împotriva clickjacking-ului); soluțiile alternative din partea clientului nu sunt fiabile. Pentru a încorpora conținut pe care nu îl controlați, solicitați proprietarului site-ului să vă adauge originea în whitelist-ul directivei `frame-ancestors` sau utilizați soluția oficială de embed/API oferită de acesta.
Care este diferența dintre DENY și SAMEORIGIN?
DENY blochează afișarea paginii în orice iframe, inclusiv în cele de pe aceeași origine; SAMEORIGIN permite încadrarea doar dacă pagina părinte este din același protocol, gazdă și port.
Salvează verificatorul URL-urile mele?
Istoricul este stocat exclusiv în fila browserului dumneavoastră prin intermediul `sessionStorage` și se șterge automat la închiderea acesteia. Serverul de verificare accesează URL-ul introdus doar pentru a citi anteturile de răspuns.
De ce returnează același URL rezultate diferite în momente diferite?
Site-urile pot returna anteturi diferite în funcție de cale, după redirecționări, în funcție de User-Agent sau pe baza testelor A/B și a regulilor WAF. Repetați verificarea pentru a vizualiza starea actuală.