Missing Web Security Header: X-Frame-Options
X-Frame-Options: descrizione
La vulnerabilità, che può essere rilevata tramite un Web Vulnerability Assessment, riguarda l’assenza dell’intestazione di sicurezza HTTP X-Frame-Options nelle risposte del server web. Questa intestazione viene utilizzata per controllare se una pagina può essere incorporata in un <frame>, <iframe>, <embed>, o <object> da un altro sito web.
Che Cosa Significa
Un po’ di storia…
Iframe dagli Anni ’90 con Furore (E non solo: Anche Object ed Embed!)
Ah, gli anni ’90: il decennio che ci ha regalato Internet Explorer, le GIF animate e… gli iframe! Gli iframe sono piccoli, adorabili riquadri che sembrano spuntare fuori dal nulla e portare l’utente in un’altra dimensione del web. Gli iframe (acronimo di inline frame) sono stati inventati per inserire una pagina web dentro un’altra pagina web. In pratica, è come se potessi guardare il mondo attraverso una finestra, ma quella finestra è un’altra pagina web.
Ma non è tutto qui! L’iframe non è l’unico cimelio di quegli anni d’oro. C’è anche l’object, quel tag che cercava disperatamente di essere tutto: un’immagine? Un video? Un PDF? L’object aveva l’ambizione di incorporare praticamente qualsiasi cosa in una pagina web, anche se a volte farlo funzionare non era così immediato.
E poi c’è l’embed, nato per portare in giro i file multimediali senza troppi fronzoli.
Ma perché questi tag sono ancora qui?
Perché, nonostante tutto, hanno ancora il loro fascino. Gli iframe continuano a essere utilizzati per incorporare contenuti da altre fonti (un elemento per tutti? Google Maps!). L’object, anche se un po’ datato, riesce ancora a fare il suo lavoro, soprattutto quando si tratta di contenuti complessi. E l’embed? Beh, è praticamente ovunque, soprattutto nei social media dove i video regnano sovrani.
In conclusione, questi tag non sono solo reliquie del passato, ma strumenti tuttoggi in uso!
Tornando agli header mancanti segnalati in un Web Vulnerability Assessment…
Come implementare l’intestazione X-Frame-Options e perché
Quando l’intestazione X-Frame-Options manca, le pagine del nostro sito web possono essere inserite all’interno di frame su siti di terze parti. Questo può essere sfruttato per alcuni tipi di attacco.
Rischi associati alla mancanza dell’intestazione X-Frame-Options
- Clickjacking
Gli attaccanti possono inserire la nostra pagina in un frame su un loro sito per ingannare gli utenti e magari indurli a cliccare su elementi che scatenano azioni malevole. - Phishing
Potenziali attacchi di phishing possono ingannare gli utenti facendo apparire come se stessero interagendo con il tuo sito legittimo. - Compromissione della sicurezza
Gli utenti potrebbero addirittura eseguire azioni involontarie molto delicate, come trasferimenti di denaro, modifiche di impostazioni o invio di dati sensibili.
Come Mitigare la Vulnerabilità
Per mitigare questa vulnerabilità, è necessario aggiungere l’intestazione X-Frame-Options nelle risposte HTTP del server, specificando una politica che limita l’uso del framing.
Opzioni di Configurazione
- DENY: Impedisce a tutte le pagine di essere inserite in un frame.
- SAMEORIGIN: Permette l’inserimento in frame solo se la pagina proviene dallo stesso dominio.
- ALLOW-FROM uri: Permette l’inserimento in frame solo da un URI specifico (non supportato in tutti i browser).
Come implementare l’intestazione X-Frame-Options e perché
Implementare l’intestazione X-Frame-Options è una buona pratica di sicurezza che aiuta a prevenire attacchi di clickjacking e migliora la sicurezza complessiva del sito web. Specificando una politica che limita l’uso degli iframe, si proteggono gli utenti da potenziali azioni dannose.
L’intestazione HTTP X-Frame-Options ha tre possibili valori:
DENY
: Impedisce completamente l’incorporazione della pagina in un frame.SAMEORIGIN
: Consente l’incorporazione della pagina solo se il dominio di origine corrisponde a quello della pagina che contiene il frame.ALLOW-FROM URI
: Consente l’incorporazione della pagina solo dal dominio specificato.
Esempi di Configurazione
Apache
Aggiungi la seguente direttiva nel file di configurazione (conf o apache2.conf):
Header always set X-Frame-Options "DENY"
Se si vuole consentire l’incorporazione solo dallo stesso dominio:
Header always set X-Frame-Options "SAMEORIGIN"
Se si vuole permettere l’incorporazione solo da un dominio specifico:
Header always set X-Frame-Options "ALLOW-FROM https://example.com/"
Nginx
Aggiungi la seguente direttiva nel blocco server del file di configurazione (conf):
server {
listen 80;
server_name example.com;
add_header X-Frame-Options “DENY”;
# Altre configurazioni…
}
Per consentire l’incorporazione solo dallo stesso dominio:
server {
listen 80;
server_name example.com;
add_header X-Frame-Options “SAMEORIGIN”;
# Altre configurazioni…
}
Oppure, per permettere l’incorporazione solo da un dominio specifico:
server {
listen 80;
server_name example.com;
add_header X-Frame-Options “ALLOW-FROM https://example.com/”;
# Altre configurazioni…
}
js (Node.js)
Utilizza il middleware helmet per configurare l’intestazione:
javascriptCopia codiceconst helmet = require('helmet');app.use(helmet.frameguard({ action: 'deny' }));
Oppure, se desideri permettere il framing solo da pagine dello stesso dominio:
javascriptCopia codiceapp.use(helmet.frameguard({ action: 'sameorigin' }));