← Tutti i controlli
SicurezzaGravità tipica: Basso

Intestazioni di isolamento dell'origine

Verifica se mancano le intestazioni COOP e CORP che isolano il tuo sito dagli attacchi cross-origin.

Cosa controlla

Questo scanner verifica se al tuo sito mancano gli header di isolamento dell'origine COOP e CORP. Rileva l'assenza di questi header che separano la tua pagina dalle altre origini nel browser.

Perché è importante

Senza questi header, la tua pagina è più esposta a certi attacchi cross-origin in cui un altro sito prova a interagire con il tuo o a leggere dati che non dovrebbe. L'isolamento dell'origine è un livello di protezione in più che riduce questo tipo di rischio.

Come risolverlo

Aggiungi gli header Cross-Origin-Opener-Policy e Cross-Origin-Resource-Policy nella configurazione del tuo server o CDN. Parti da valori prudenti e verifica che le tue risorse e integrazioni funzionino ancora prima di stringerli.

Come funziona questo controllo

Scanaris guarda nella risposta principale della tua pagina se sono presenti due header: Cross-Origin-Opener-Policy (COOP) e Cross-Origin-Resource-Policy (CORP). Se manca uno o entrambi, apre un unico rilievo di gravità bassa indicando quali. Non valuta il valore, solo la presenza. Sono i due header di isolamento dell'origine più semplici da adottare; il terzo della famiglia, Cross-Origin-Embedder-Policy, non è richiesto perché rompe qualsiasi risorsa di terzi che non collabori e raramente conviene su un sito normale.

Cosa protegge ciascuno

COOP decide se la tua finestra condivide il "gruppo di contesto" con quella che l'ha aperta o con quelle che apri tu. Con same-origin, una pagina di un altro dominio che apre la tua con window.open non ha più un riferimento utilizzabile a essa (e viceversa), il che taglia gli attacchi di manipolazione tra schede e chiude la via con cui si sfruttano le fughe di memoria tipo Spectre. CORP decide chi può incorporare le tue risorse. Con same-origin, un altro sito non può caricare le tue immagini, script o font con un tag <img> o <script> anche se gli URL sono pubblici: il browser blocca la risposta prima che arrivi a quel sito. Nessuno dei due corregge una falla esistente; sono difesa in profondità, e per questo la loro assenza è di gravità bassa.

Come aggiungerli

Valori consigliati per un sito che non condivide risorse con altri domini:

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Resource-Policy: same-origin
  • Nuxt: in routeRules di nuxt.config, nella regola '/**', accanto agli altri header.
  • Next.js: nella funzione headers() di next.config.js.
  • Vercel: in vercel.json, sezione headers. Netlify: in _headers, sotto /*.
  • nginx: due righe add_header ... always; nel blocco server. Apache: Header always set nel VirtualHost.
  • Express: helmet() li aggiunge di default nelle versioni recenti; controlla la versione che hai installata.

Prima di attivarli, due verifiche

  • Login con finestra popup. Se usi "Accedi con Google" o un altro provider in modalità popup, la finestra deve parlare con quella che l'ha aperta. Con same-origin smette di funzionare; usa same-origin-allow-popups, che mantiene la protezione e permette quel caso.
  • Risorse che servi ad altri domini. Se le tue immagini o font vengono caricati da un altro tuo sito (un blog su un altro dominio, un widget che terzi incorporano), same-origin li bloccherà lì. Usa same-site se l'altro sito è un sottodominio, o cross-origin sulle rotte specifiche di quelle risorse.

Verifica che sia risolto

curl -sI https://tuodominio.it | grep -iE "^cross-origin-(opener|resource)-policy:"

Devono comparire entrambe le righe. Poi apri il tuo sito, prova il login e qualsiasi integrazione con popup, e controlla la console del browser: una risorsa bloccata da CORP compare lì con un messaggio esplicito.

Domande frequenti

Questo sostituisce il CORS?

No, sono complementari e vanno in direzioni opposte. Il CORS apre le tue risposte a origini specifiche quando serve; il CORP le chiude di default a chiunque voglia incorporarle. Puoi avere CORP same-origin su tutto il sito e CORS aperto su una rotta API.

Mi serve anche Cross-Origin-Embedder-Policy?

Solo se vuoi SharedArrayBuffer o timer ad alta precisione (montaggio video, emulatori, alcune app WebAssembly). Il COEP richiede che tutto ciò che incorpori porti CORP o CORS, e la maggior parte degli script di terzi non lo fa. Per un sito comune, COOP e CORP bastano.

Quanto migliora il voto?

Poco in punti, perché è un rilievo di gravità bassa; ma è tra le poche migliorie senza effetti collaterali se fai le due verifiche qui sopra. Gli header che pesano davvero sono in header di sicurezza e spiegati in header HTTP per umani.

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