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
routeRulesdinuxt.config, nella regola'/**', accanto agli altri header. - Next.js: nella funzione
headers()dinext.config.js. - Vercel: in
vercel.json, sezioneheaders. Netlify: in_headers, sotto/*. - nginx: due righe
add_header ... always;nel bloccoserver. Apache:Header always setnel 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-originsmette di funzionare; usasame-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-originli bloccherà lì. Usasame-sitese l'altro sito è un sottodominio, ocross-originsulle 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.