Utilia

SRI-hashgenerator

Generér SRI-hashværdier (Subresource Integrity) med sha384 til en JavaScript- eller CSS-fil, og kopiér færdige integrity- og crossorigin-attributter lokalt.

Indsæt filens indhold, eller åbn selve filen: værktøjet downloader ikke webadresser. Hvis et script skulle læses fra et andet website, skulle den server tillade det (CORS), eller vi skulle have en server, der henter det for dig, og intet, du hasher her, forlader nogensinde din browser. Hash præcis den fil, du vil levere.

Hash

Teksten hashes som UTF-8. Browsere omdanner Windows-linjeskift (CRLF) til LF i indsat tekst, og én ændret byte ødelægger hashværdien: åbn selve filen, hvis du er i tvivl.

Algoritmer

Webadressen skrives kun ind i kodestumpen og hentes aldrig. Lad feltet stå tomt for at bruge filnavnet.

Sådan genererer du en SRI-hash

  1. Under Hash vælger du Indsat kode eller Filer.
  2. Indsæt det præcise indhold af scriptet eller typografiarket i Indhold af script eller typografiark, og tryk på Generér SRI-hash, eller slip en eller flere .js- og .css-filer på feltet. Hashværdierne opdateres, mens du skriver.
  3. Lad SHA-384 (anbefalet) være afkrydset, eller tilføj SHA-256 og SHA-512. Hver afkrydset algoritme tilføjer ét element til værdien.
  4. Vælg Tag (automatisk ud fra filnavnet, <script>, <script type="module"> eller <link rel="stylesheet">), skriv Ressourcens webadresse til kodestumpen (valgfri), og vælg crossorigin-tilstanden.
  5. Kopiér integrity-værdi eller hele tagget.
  6. Vil du tjekke et tag, du allerede bruger, så indsæt dets værdi eller hele tagget i Tjek en eksisterende integrity-værdi (valgfri).

Hvad Subresource Integrity gør

Når en side indlæser et script fra et CDN, stoler browseren på alt, hvad den server returnerer. Hvis CDN’et er kompromitteret, eller filen er ændret, kører den ændrede kode med fuld adgang til din side. Subresource Integrity (W3C SRI) lukker det hul: du offentliggør filens forventede hashværdi i attributten integrity, browseren hasher det, den downloader, og den nægter at køre scriptet eller anvende typografiarket, hvis de to ikke er ens.

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

Værdien er algoritmens navn, en bindestreg og filens bytes som Base64-kodet digest. Eksemplet er hashværdien af alert('Hello, world.'); fra SRI-specifikationen. Når flere hashværdier er angivet, ser browsere kun på den stærkeste algoritme, der er til stede, og accepterer filen, hvis en hashværdi af den algoritme passer. Sådan kan et website angive to versioner af en fil under en udrulning.

Hvorfor crossorigin er påkrævet

For en fil fra en anden oprindelse kan browseren kun tjekke dens integritet, hvis svaret hentes i CORS-tilstand, så tagget skal have en crossorigin-attribut, og serveren skal svare med headeren Access-Control-Allow-Origin. Brug anonymous (ingen cookies) til offentlige CDN’er; use-credentials er til sjældne private ressourcer. Uden CORS blokerer browseren filen i stedet for at indlæse den ukontrolleret.

Hvorfor værktøjet ikke henter webadresser

Værktøjet hasher kun kode, du indsætter, eller filer, du åbner. At downloade et script fra dets webadresse inde på siden ville kun virke, når den server tillader læsning på tværs af oprindelser, og for at komme uden om det skulle en server hente filen for dig, og den ville også se, hvad du hasher. Alt her kører i din browser. Den enkleste metode er at downloade præcis den fil, du vil henvise til (samme version og samme minificerede build), og åbne den her.

Ofte stillede spørgsmål

Hvilken algoritme skal jeg bruge?

SHA-384 er det sædvanlige valg og det, de fleste CDN’er offentliggør. SHA-256 og SHA-512 understøttes også af alle moderne browsere. MD5 og SHA-1 er ikke tilladt i SRI.

Min hashværdi er rigtig, men browseren blokerer stadig filen. Hvorfor?

Tjek, at serveren sender Access-Control-Allow-Origin, og at tagget har crossorigin. Sørg også for, at CDN’et leverer de samme bytes: en anden version, en automatisk minificering eller et manglende afsluttende linjeskift ændrer alt sammen hashværdien.

Hvorfor giver min indsatte kode en anden hashværdi end filen?

Browsere omdanner Windows-linjeskift (CRLF) til LF i tekstfelter, og en editor kan tilføje eller fjerne en byte order mark eller et afsluttende linjeskift. Åbn selve filen for at hashe dens præcise bytes.

Har jeg brug for SRI til filer på mit eget domæne?

Det beskytter mod ændringer, der sker, efter du har beregnet hashværdien, så det betyder mest for tredjepartsværter. Til dine egne filer er det som regel lettere at bruge en bundler, der genererer hashværdierne ved build.

Virker SRI til billeder eller skrifttyper?

Attributten integrity understøttes på <script> og <link rel="stylesheet"> (og på <link rel="preload"> eller modulepreload til dem). Billeder og skrifttyper kan ikke bruge den.