Parte 7 della serie "Sicurezza web UE: 10 passi verso un rating migliore"
X-Content-Type-Options
Il problema
I browser a volte cercano di "indovinare" il tipo di un file — indipendentemente dall'header Content-Type. Un'immagine che in realtà contiene JavaScript? Il browser lo esegue. Questo si chiama MIME sniffing ed è una porta d'accesso per attacchi di injection.
La soluzione
X-Content-Type-Options: nosniff
Un header, un valore. Il browser accetta solo file con il tipo MIME dichiarato.
Adozione: 27,7%. Quasi tre quarti dei siti UE sono vulnerabili ad attacchi di confusione MIME.
Come configurarlo
Nginx:
add_header X-Content-Type-Options "nosniff" always;
Apache:
Header always set X-Content-Type-Options "nosniff"
C'è un solo valore valido (nosniff), nessuna configurazione, nessun effetto collaterale. Nessun motivo per non impostarlo.
Referrer-Policy
Il problema
Quando un utente clicca un link esterno sul vostro sito, il browser invia per default l'URL completo della pagina di origine come header Referrer. Questo può far trapelare informazioni sensibili:
https://vostro-dominio.com/dashboard?user=12345&token=abchttps://vostro-dominio.com/admin/reports/audit-riservatohttps://vostro-dominio.com/search?q=sintomi+medici
L'operatore del sito di destinazione vede l'URL completo — compresi parametri di query, percorsi e token di sessione.
La soluzione
Referrer-Policy: strict-origin-when-cross-origin
Con questa policy, il browser invia:
- Quando naviga verso un altro dominio: solo l'origine (https://vostro-dominio.com), senza percorsi
- All'interno del proprio dominio: l'URL completo (utile per l'analisi)
- In caso di downgrade da HTTPS a HTTP: nulla
Adozione: 13,1%.
Come configurarlo
Nginx:
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
Apache:
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Policy alternative
| Policy | Comportamento | Raccomandazione |
|---|---|---|
no-referrer |
Non invia mai il referrer | Troppo restrittiva (rompe l'analisi) |
origin |
Invia sempre solo l'origine | Buona, ma perde i percorsi interni |
strict-origin-when-cross-origin |
Origine cross-domain, completo internamente | Raccomandata |
same-origin |
Completo internamente, nulla esternamente | Buona per applicazioni sensibili |
Entrambi insieme: lo snippet Nginx
# Header di sicurezza — pronto per il copia-incolla
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Quattro header, quattro righe. Nella vostra configurazione Nginx o in un file include. Combinati con le Parti 1-3 di questa serie, coprono i sei header di sicurezza più importanti.
Verifica i tuoi header
La prossima settimana nella Parte 8: Record CAA — quale autorità di certificazione è autorizzata a emettere certificati per il vostro dominio?