HTTP Security Headers: Proteggere il Tuo Sito nel 2025

THEJORD Team5 min di lettura
development

HTTP Security Headers essenziali per proteggere il tuo sito: CSP, HSTS, X-Frame-Options. Guida pratica contro XSS, clickjacking e gli attacchi più comuni.

HTTP Security Headers: Proteggere il Tuo Sito nel 2025

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 risorse
  • script-src: Sorgenti JavaScript permesse
  • style-src: Sorgenti CSS permesse
  • img-src: Sorgenti immagini permesse
  • connect-src: URL per fetch/XHR/WebSocket
  • frame-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 sottodomini
  • preload: 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 referrer
  • same-origin: Solo per stesso dominio
  • strict-origin: Solo origine, solo HTTPS→HTTPS
  • strict-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

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.