HTTP Security Headers: Proteggere il Tuo Sito nel 2025
HTTP Security Headers essenziali per proteggere il tuo sito: CSP, HSTS, X-Frame-Options. Guida pratica contro XSS, clickjacking e gli attacchi più comuni.
Introduzione agli HTTP Security Headers
Gli HTTP security headers sono la prima linea di difesa contro attacchi web comuni. Istruiscono i browser su come comportarsi, prevenendo XSS, clickjacking e altri attacchi. Questa guida spiega ogni header e come implementarli.
Content-Security-Policy (CSP)
Cos'è
CSP controlla quali risorse possono essere caricate, prevenendo XSS e data injection:
Content-Security-Policy: default-src 'self';
script-src 'self' https://cdn.example.com;
style-src 'self' 'unsafe-inline';
img-src 'self' data: https:;
connect-src 'self' https://api.example.com;
Direttive Principali
default-src: Fallback per tutte le risorsescript-src: Sorgenti JavaScript permessestyle-src: Sorgenti CSS permesseimg-src: Sorgenti immagini permesseconnect-src: URL per fetch/XHR/WebSocketframe-ancestors: Chi può incorporare la pagina
Modalità Report-Only
Content-Security-Policy-Report-Only: default-src 'self';
report-uri /csp-report;
Strict-Transport-Security (HSTS)
Forza connessioni HTTPS:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
max-age: Durata in secondi (1 anno = 31536000)includeSubDomains: Applica a tutti i sottodominipreload: Richiedi inclusione nella lista preload dei browser
X-Content-Type-Options
Previene MIME type sniffing:
X-Content-Type-Options: nosniff
Forza il browser a rispettare il Content-Type dichiarato, prevenendo attacchi dove file malevoli sono mascherati.
X-Frame-Options
Previene clickjacking:
X-Frame-Options: DENY # Mai in iframe
X-Frame-Options: SAMEORIGIN # Solo stesso dominio
X-Frame-Options: ALLOW-FROM https://trusted.com # Deprecato
Nota: Preferisci CSP frame-ancestors per controllo più granulare.
X-XSS-Protection
Attiva filtro XSS del browser (legacy):
X-XSS-Protection: 1; mode=block
Nota: Deprecato nei browser moderni. CSP è la soluzione preferita.
Referrer-Policy
Controlla quali informazioni referrer vengono inviate:
Referrer-Policy: strict-origin-when-cross-origin
Valori Comuni
no-referrer: Mai inviare referrersame-origin: Solo per stesso dominiostrict-origin: Solo origine, solo HTTPS→HTTPSstrict-origin-when-cross-origin: Raccomandato
Permissions-Policy
Controlla quali API browser sono disponibili:
Permissions-Policy: geolocation=(), camera=(), microphone=()
Disabilita funzionalità non necessarie per ridurre la superficie di attacco.
Implementazione
Next.js
// next.config.js
module.exports = {
async headers() {
return [{
source: '/(.*)',
headers: [
{ key: 'X-Content-Type-Options', value: 'nosniff' },
{ key: 'X-Frame-Options', value: 'DENY' },
{ key: 'Strict-Transport-Security', value: 'max-age=31536000' },
{ key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' }
]
}];
}
};
Express.js con Helmet
const helmet = require('helmet');
app.use(helmet());
Nginx
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header Strict-Transport-Security "max-age=31536000" always;
add_header Content-Security-Policy "default-src 'self'" always;
Testare i Security Headers
- securityheaders.com - Scan gratuito
- Mozilla Observatory - Analisi dettagliata
- DevTools → Network → Headers
Configurazione Raccomandata
# Configurazione minima raccomandata
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: geolocation=(), camera=(), microphone=()
Content-Security-Policy: default-src 'self'; script-src 'self'
Conclusione
Gli HTTP security headers sono facili da implementare e forniscono protezione significativa. Inizia con la configurazione minima raccomandata, testa con gli strumenti online, e affina CSP gradualmente per il tuo caso specifico.