← Tutti i controlli
SicurezzaGravità tipica: Medio

Scanner delle intestazioni di sicurezza

Controlla che il tuo sito invii le principali intestazioni HTTP di sicurezza come CSP, HSTS e X-Frame-Options.

Cosa controlla

Questo scanner esamina gli header HTTP di sicurezza che il tuo sito invia a ogni risposta, come Content-Security-Policy, HSTS e X-Frame-Options. Controlla quali sono presenti e quali mancano. Sono istruzioni che il tuo server dà al browser per proteggersi.

Perché è importante

Senza questi header il browser non attiva protezioni fondamentali e il tuo sito è più esposto ad attacchi come l'iniezione di script o il clickjacking. Molti framework non li impostano di default, quindi è facile dimenticarli. La loro assenza abbassa anche il tuo punteggio nelle verifiche di sicurezza.

Come risolverlo

Aggiungi gli header mancanti nella configurazione del tuo server, CDN o framework, dove definisci le risposte HTTP. Parti dai più importanti: Content-Security-Policy, Strict-Transport-Security e X-Frame-Options. Molti host come Vercel o Netlify ti permettono di impostarli in un file di header senza toccare il codice.

Come funziona questo controllo

Scanaris richiede la tua pagina principale come farebbe un browser e legge gli header della risposta. Cerca sei header precisi e, per ciascuno mancante, apre un riscontro con un valore consigliato: Content-Security-Policy, Strict-Transport-Security e X-Frame-Options con severità media, e X-Content-Type-Options, Referrer-Policy e Permissions-Policy con severità bassa. Qui non valuta la qualità della CSP né dell'HSTS: lo fanno i controlli CSP debole e HSTS debole. Si guarda solo la risposta dell'URL analizzato, quindi se la tua API vive su un altro dominio, analizzalo a parte.

Cosa protegge ogni header

  • Content-Security-Policy limita da dove possono essere caricati script, stili e immagini. È la difesa principale contro l'iniezione di script (XSS).
  • Strict-Transport-Security obbliga il browser a usare sempre HTTPS con il tuo dominio, anche se qualcuno scrive l'indirizzo senza la s.
  • X-Frame-Options impedisce che il tuo sito venga incorporato in un iframe altrui, che è la base del clickjacking.
  • X-Content-Type-Options: nosniff evita che il browser "indovini" il tipo di un file ed esegua come script qualcosa che non lo era.
  • Referrer-Policy controlla quanta parte dell'URL viene inviata ad altri siti quando un utente clicca un link.
  • Permissions-Policy disattiva API del browser che non usi, come fotocamera, microfono o geolocalizzazione.

Come aggiungerli a seconda del tuo hosting

Vercel

In vercel.json, oppure in next.config con la funzione headers() se usi Next.js:

{
  "headers": [
    {
      "source": "/(.*)",
      "headers": [
        { "key": "Strict-Transport-Security", "value": "max-age=63072000; includeSubDomains; preload" },
        { "key": "X-Frame-Options", "value": "DENY" },
        { "key": "X-Content-Type-Options", "value": "nosniff" },
        { "key": "Referrer-Policy", "value": "strict-origin-when-cross-origin" },
        { "key": "Permissions-Policy", "value": "camera=(), microphone=(), geolocation=()" }
      ]
    }
  ]
}

Netlify

Un file _headers nella cartella che viene pubblicata:

/*
  Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
  X-Frame-Options: DENY
  X-Content-Type-Options: nosniff
  Referrer-Policy: strict-origin-when-cross-origin
  Permissions-Policy: camera=(), microphone=(), geolocation=()

Nuxt

In nuxt.config, dentro routeRules, la regola '/**' con un oggetto headers e le stesse coppie chiave-valore. È esattamente quello che fa Scanaris.

Express

import helmet from 'helmet';
app.use(helmet());

nginx

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;

La Content-Security-Policy manca dagli esempi di proposito: dipende da quali script e servizi carica il tuo sito e conviene iniziarla in modalità report. La procedura è in header di sicurezza HTTP spiegati per umani.

Verifica che ci siano

curl -sI https://tuodominio.com | grep -iE "strict-transport|x-frame|x-content-type|referrer-policy|permissions-policy|content-security"

Devono comparire tutte e sei le righe. Se hai una CDN davanti al server, verifica sull'URL pubblico, perché alcune CDN tolgono o sovrascrivono gli header. L'analizzatore di header fa la stessa lettura con una spiegazione per header.

Domande frequenti

X-Frame-Options o frame-ancestors?

Fanno la stessa cosa; frame-ancestors dentro la CSP è la versione moderna e permette di elencare domini precisi. Mantieni anche X-Frame-Options per i browser vecchi; non si disturbano.

Posso rompere il sito aggiungendo questi header?

I cinque degli esempi non rompono nulla in un sito normale. L'unico a rischio è la CSP, per questo si aggiunge prima in modalità Content-Security-Policy-Report-Only e si passa a bloccare quando i report sono puliti.

Serve preload nell'HSTS?

Non per superare il controllo. preload permette di includere il tuo dominio nella lista che i browser portano di fabbrica; è un impegno a lungo termine (tutto il tuo dominio e i sottodomini in HTTPS per sempre), quindi attivalo solo quando sei sicuro.

Verificalo sul tuo sito

Scansiona il tuo sito gratis e scopri se questo e altri 44 controlli passano, con un prompt di fix per ogni problema.

Scansiona il mio sito gratis

Dal blog

Controlli correlati