Passa al contenuto principale

2. Intestazione X-Frame-Options

2. Intestazione X-Frame-Options

Il campo di intestazione HTTP X-Frame-Options indica una politica che specifica se il browser deve eseguire il rendering della risorsa trasmessa all'interno di un <frame> o <iframe>. I server possono dichiarare questa politica nell'intestazione delle loro risposte HTTP per prevenire attacchi di clickjacking, garantendo che il loro contenuto non venga incorporato in altri siti.

2.1 Sintassi

Il nome del campo di intestazione è:

X-Frame-Options

Ci sono tre valori diversi per il campo di intestazione. Questi sono mutualmente esclusivi; cioè, il campo di intestazione DEVE essere impostato esattamente su uno dei tre valori.

DENY

Un browser che riceve contenuto con questo campo di intestazione NON DEVE visualizzare questo contenuto in alcun frame.

SAMEORIGIN

Un browser che riceve contenuto con questo campo di intestazione NON DEVE visualizzare questo contenuto in un frame da una pagina di origine diversa dal contenuto stesso. Se un browser o plugin non può determinare in modo affidabile se l'origine del contenuto e del frame sono uguali, questo DEVE essere trattato come "DENY".

Si prega di notare che le implementazioni attuali variano nell'interpretazione di questo criterio. In alcune, è richiesto solo che l'origine del contesto di navigazione di livello superiore corrisponda all'origine del contenuto che utilizza la direttiva X-Frame-Options; in altre, questo criterio deve essere soddisfatto per tutti i contesti di navigazione ancestrali. Per maggiori dettagli sull'annidamento dei frame e le variazioni nel comportamento di questo campo di intestazione in diversi browser, vedere la sezione 2.3.2.2. Inoltre, fare riferimento alla sezione 4, paragrafo 2 per i potenziali problemi di sicurezza che possono derivarne.

ALLOW-FROM (seguito da un'origine serializzata [RFC6454])

Un browser che riceve contenuto con questo campo di intestazione NON DEVE visualizzare questo contenuto in un frame da una pagina il cui contesto di navigazione di livello superiore è di un'origine diversa dall'origine specificata. Sebbene questo valore di intestazione possa avere un supporto limitato, è deprecato nei browser moderni.

Si noti che il campo di intestazione X-Frame-Options DEVE essere inviato come campo di intestazione HTTP e i browser ignorano specificamente le istanze trovate nel tag <meta http-equiv>.

2.2 Forma di Backus-Naur aumentata (ABNF)

L'ABNF RFC 5234 [RFC5234] del valore del campo di intestazione X-Frame-Options è il seguente:

id-name                = "X-Frame-Options"
X-Frame-Options = "DENY"
/ "SAMEORIGIN"
/ ( "ALLOW-FROM" RWS serialized-origin )

RWS = 1*( SP / HTAB )
; required whitespace

serialized-origin = scheme "://" host [ ":" port ]
; <scheme>, <host>, <port> as per RFC 6454

dove "serialized-origin" è definito nel RFC 6454 [RFC6454], sezione 6.2. La produzione "serialized-origin" implica che la stringa di origine serializzata non può includere spazi bianchi.

2.2.1 Esempi di X-Frame-Options

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

2.3 Questioni di progettazione

2.3.1 Abilitare contenuto HTML da altri domini

Ci sono diversi vettori diretti principali che abilitano contenuto HTML da altri domini, ad esempio:

  • Elementi <frame>
  • Elementi <iframe>
  • Elementi <object>
  • Elementi <applet>
  • Elementi <embed>

Oltre a questi, altri elementi possono essere sfruttati per intraprendere azioni nei frame padre che possono contribuire a un attacco simile al clickjacking, inclusi il tag <script>, il tag <form> e il tag <button>, tra gli altri. Il campo di intestazione X-Frame-Options fornisce un meccanismo attraverso il quale gli operatori di siti possono indicare che le loro pagine non dovrebbero essere incorporate in frame da altri domini, e quindi difendersi contro attacchi di clickjacking.

2.3.2 Comportamento e elaborazione del browser

2.3.2.1 Violazione di X-Frame-Options

Quando un browser rileva un'intestazione X-Frame-Options che impedisce il rendering della pagina in un frame, il browser DEVE immediatamente cessare il rendering del documento.

La pagina deve essere trattata come se l'utente avesse annullato la richiesta di caricare il documento. Questo è simile al modo in cui l'agente utente elabora la risposta "204 No Content", sebbene quest'ultima non risulti in una condizione di errore.

Se il browser ha già iniziato a scaricare immagini o altre richieste di risorse incluse nella pagina, il browser DOVREBBE tentare di interrompere il download di tali risorse il prima possibile.

2.3.2.2 Variazione nel comportamento attuale del browser

I browser differiscono nella loro interpretazione del controllo del frame e del contesto di navigazione richiesto quando viene utilizzato il campo di intestazione SAMEORIGIN. Il comportamento previsto è che l'agente utente DEVE rendere la pagina in un frame solo se quel frame è nella stessa origine della pagina incorniciata.

Tuttavia, le implementazioni dei browser differiscono. Alcune implementazioni percorrono l'intero albero degli antenati dei contesti di navigazione e richiedono che ogni antenato sia nella stessa origine. Altre verificano solo che il contesto di navigazione di livello superiore (la finestra) provenga dalla stessa origine.

Ciò significa che, per le pagine che sono "incorniciate" attraverso più pagine intermedie (cioè, un frame all'interno di un frame all'interno di un frame), l'insieme delle pagine che verranno renderizzate con successo può essere più restrittivo (nelle implementazioni che controllano l'intera catena degli antenati) o meno restrittivo (nelle implementazioni che controllano solo il frame di livello superiore) di quanto la specifica intenda.

Gli operatori di siti dovrebbero essere consapevoli di questa potenziale differenza di comportamento e testare il rendering all'interno della loro base di browser prevista per garantire la conformità con le loro politiche anti-clickjacking.

2.3.2.3 Modello di progettazione dell'utilizzo e scenario di esempio per il parametro ALLOW-FROM

A causa del supporto debole e delle implementazioni variabili tra diversi browser, l'opzione ALLOW-FROM è stata deprecata. Gli operatori di siti DOVREBBERO considerare l'uso della direttiva frame-ancestors di Content Security Policy [CSP2] invece, che fornisce un migliore controllo sulle politiche di incorporamento dei frame e ha un migliore supporto del browser.

2.3.2.4 Nessuna memorizzazione nella cache dell'intestazione X-Frame-Options

I browser DEVONO elaborare il valore del campo di intestazione X-Frame-Options per ogni risposta HTTP, indipendentemente dalle direttive di cache presenti in quella risposta HTTP o risposte precedentemente memorizzate nella cache. Il campo di intestazione viene valutato al momento della navigazione e NON DEVE essere memorizzato nella cache. Ciò garantisce che venga applicata la politica più recente.