Vai al contenuto

Hash di integrità delle risorse (SRI)

Subresource Integrity Hash

Calcola l’attributo Subresource Integrity (sha256, sha384 o sha512) per uno script o un foglio di stile che incolli o trascini qui.

Uno `<script src>` che punta a una CDN è un permesso permanente perché quella CDN esegua qualunque codice le pare nei browser di chi usa il sito. Un attributo Subresource Integrity lo revoca: il browser si rifiuta di eseguire un file il cui hash non corrisponde a quello fissato.

⚡ In locale, con un aiuto facoltativo dal serversriintegritywebhash

Trascina qui il file esatto

Lo script o il foglio di stile che servirai davvero. L’hash è calcolato così com’è.

L’hash è calcolato con WebCrypto nel tuo browser: è lo stesso digest che il browser andrà a controllare. Non c’è un campo URL, ed è voluto: scaricare un file remoto da questa pagina per calcolarne l’hash finirebbe bloccato da CORS oppure diventerebbe un vettore SSRF, e un browser non può risolvere e poi fissare un host come fa un server. Metti qui il file che servirai davvero.

Come si usa

  1. Dargli il file oppure l’URL

    Si trascina esattamente il file che verrà distribuito, oppure si fa recuperare un URL. L’hash è calcolato sui byte, quindi un file e un URL che differiscono di un ritorno a capo danno attributi diversi.

  2. Copiare l’attributo per intero

    L’output è `integrity="sha384-…"`. Va incollato sul tag insieme a `crossorigin="anonymous"`: senza quello una risorsa di origine diversa è opaca e l’integrità non si può verificare.

  3. Fissare una versione, non un’etichetta mobile

    Un attributo di integrità puntato a un URL `@latest` rompe il sito il giorno in cui la CDN pubblica. Va puntato a una versione esatta e vanno aggiornati insieme.

Domande frequenti

Quale algoritmo conviene usare?

sha384 è la scelta consueta ed è quello che pubblicano la maggior parte delle CDN. sha256 è accettato e sha512 è più robusto, ma la differenza non è il punto debole di questo schema: lo è fissare la versione sbagliata.

Dopo averlo aggiunto lo script ha smesso di caricarsi.

Quasi sempre è una di tre cose: il file è cambiato sulla CDN, manca `crossorigin="anonymous"`, oppure l’hash è stato preso da una build diversa da quella che viene servita (per esempio un file minificato al posto di uno non minificato).

L’SRI protegge da uno script che era ostile fin dall’inizio?

No. Garantisce che si ricevano i byte che sono stati fissati, e nient’altro. Se la versione fissata era già dotata di backdoor, l’SRI consegna fedelmente la backdoor tutte le volte.

Può ricevere da

Dopo

Questi accettano ciò che produce questo strumento, così il risultato può passare direttamente.