Utilia

SRI-hashgenerator

Generer SRI-hasher (Subresource Integrity, sha384) for en JavaScript- eller CSS-fil, og kopier ferdige integrity- og crossorigin-attributter lokalt.

Lim inn innholdet i filen eller åpne selve filen: dette verktøyet laster ikke ned URL-er. Å lese et skript fra et annet nettsted ville krevd at serveren tillater det (CORS), eller en egen server som henter det for deg, og ingenting du hasher her, forlater nettleseren din. Hash den nøyaktige filen du skal levere.

Hash

Teksten hashes som UTF-8. Nettlesere gjør Windows-linjeskift (CRLF) om til LF i innlimt tekst, og én endret byte ødelegger hashen: åpne selve filen hvis du er i tvil.

Algoritmer

URL-en skrives bare inn i kodebiten og blir aldri forespurt. La feltet stå tomt for å bruke filnavnet.

Slik genererer du en SRI-hash

  1. Under Hash velger du Innlimt kode eller Filer.
  2. Lim inn det nøyaktige innholdet i skriptet eller stilarket i Innhold i skript eller stilark og trykk Generer SRI-hash, eller slipp én eller flere .js- og .css-filer på slippsonen. Hashene oppdateres mens du skriver.
  3. La SHA-384 (anbefalt) stå avhuket, eller legg til SHA-256 og SHA-512. Hver avhuket algoritme legger til ett element i verdien.
  4. Velg Tagg (automatisk fra filnavnet, <script>, <script type="module"> eller <link rel="stylesheet">), skriv inn URL til ressursen for kodebiten (valgfri) og velg crossorigin-modus.
  5. Kopier integrity-verdi eller hele taggen.
  6. Vil du sjekke en tagg du allerede bruker, limer du inn verdien eller hele taggen i Sjekk en eksisterende integrity-verdi (valgfri).

Hva Subresource Integrity gjør

Når en side laster et skript fra et CDN, stoler nettleseren på det serveren sender tilbake. Hvis CDN-et er kompromittert eller filen er endret, kjører den endrede koden med full tilgang til siden din. Subresource Integrity (W3C SRI) tetter dette hullet: du publiserer den forventede hashen til filen i integrity-attributtet, nettleseren hasher det den laster ned, og den nekter å kjøre skriptet eller bruke stilarket hvis de to ikke er like.

<script src="https://cdn.example.com/lib.min.js"
        integrity="sha384-H8BRh8j48O9oYatfu5AZzq6A9RINhZO5H16dQZngK7T62em8MUt1FLm52t+eX6xO"
        crossorigin="anonymous"></script>

Verdien er algoritmenavnet, en bindestrek og den Base64-kodede sjekksummen av filens byte. Eksempelet er hashen av alert('Hello, world.'); fra SRI-spesifikasjonen. Når flere hasher er oppført, ser nettlesere bare på den sterkeste algoritmen som finnes, og godtar filen hvis en av hashene for den algoritmen samsvarer. Slik kan et nettsted oppgi to versjoner av en fil under en utrulling.

Hvorfor crossorigin kreves

For en fil på en annen opprinnelse (origin) kan nettleseren bare sjekke integriteten hvis svaret hentes i CORS-modus. Taggen trenger derfor et crossorigin-attributt, og serveren må svare med en Access-Control-Allow-Origin-header. Bruk anonymous (ingen informasjonskapsler) for offentlige CDN-er. use-credentials er for sjeldne private ressurser. Uten CORS blokkerer nettleseren filen i stedet for å laste den uten kontroll.

Hvorfor verktøyet ikke henter URL-er

Dette verktøyet hasher bare kode du limer inn eller filer du åpner. Å laste ned et skript fra URL-en inne på siden ville bare fungert når serveren tillater lesing på tvers av opprinnelser, og å omgå det ville krevd en server som henter filen for deg, og som da også ville sett hva du hasher. Alt her kjører i nettleseren din. Den enkleste fremgangsmåten er å laste ned den nøyaktige filen du skal referere til (samme versjon og samme minifiserte utgave) og åpne den her.

Ofte stilte spørsmål

Hvilken algoritme bør jeg bruke?

SHA-384 er det vanlige valget og det de fleste CDN-er publiserer. SHA-256 og SHA-512 støttes også av alle moderne nettlesere. MD5 og SHA-1 er ikke tillatt i SRI.

Hashen min er riktig, men nettleseren blokkerer likevel filen. Hvorfor?

Sjekk at serveren sender Access-Control-Allow-Origin, og at taggen har crossorigin. Pass også på at CDN-et leverer de samme byte-ene: en annen versjon, en automatisk minifiserer eller et manglende siste linjeskift endrer hashen.

Hvorfor gir den innlimte koden en annen hash enn filen?

Nettlesere gjør Windows-linjeskift (CRLF) om til LF i tekstfelt, og et redigeringsprogram kan legge til eller fjerne en byte order mark eller et siste linjeskift. Åpne selve filen for å hashe de nøyaktige byte-ene.

Trenger jeg SRI for filer på mitt eget domene?

Det beskytter mot endringer som er gjort etter at du beregnet hashen, så det betyr mest for tredjepartsverter. For egne filer er det som regel enklere med en bundler som lager hashene ved bygging.

Fungerer SRI for bilder eller skrifter?

Attributtet integrity støttes på <script> og <link rel="stylesheet"> (og på <link rel="preload"> eller modulepreload for disse). Bilder og skrifter kan ikke bruke det.