Utilia

Generator zgoščene vrednosti SRI

Ustvari zgoščene vrednosti Subresource Integrity (SRI) sha384 za datoteko JavaScript ali CSS in kopiraj pripravljena atributa integrity in crossorigin, lokalno.

Prilepi vsebino datoteke ali odpri samo datoteko: to orodje ne prenaša naslovov URL. Branje skripte z druge strani bi zahtevalo, da to dovoli tisti strežnik (CORS), ali naš lasten strežnik, ki bi jo prenesel namesto tebe, vse, kar tu zgostiš, pa ne zapusti tvojega brskalnika. Zgosti natanko datoteko, ki jo boš ponujal.

Zgoščena vrednost

Besedilo se zgosti kot UTF-8. Brskalniki v prilepljenem besedilu konce vrstic Windows (CRLF) spremenijo v LF, en spremenjen bajt pa pokvari zgoščeno vrednost: kadar dvomiš, odpri samo datoteko.

Algoritmi

URL je samo zapisan v izsek kode, nikoli se ne zahteva. Pusti prazno, če želiš uporabiti ime datoteke.

Kako ustvariti zgoščeno vrednost SRI

  1. Pod Zgoščena vrednost izberi Prilepljena koda ali Datoteke.
  2. V Vsebina skripte ali slogovne datoteke prilepi natančno vsebino skripte ali slogovne datoteke in pritisni Ustvari zgoščeno vrednost SRI ali spusti eno ali več datotek .js in .css na območje za spuščanje. Zgoščene vrednosti se posodabljajo med tipkanjem.
  3. Pusti obkljukan SHA-384 (priporočeno) ali dodaj SHA-256 in SHA-512. Vsak obkljukan algoritem vrednosti doda en žeton.
  4. Izberi Oznako (samodejno po imenu datoteke, <script>, <script type="module"> ali <link rel="stylesheet">), vpiši URL vira za izsek kode (neobvezno) in izberi način crossorigin.
  5. Kopiraj vrednost integrity ali celotno oznako.
  6. Če želiš preveriti oznako, ki jo že uporabljaš, njeno vrednost ali celotno oznako prilepi v Preveri obstoječo vrednost integrity (neobvezno).

Kaj počne Subresource Integrity

Ko stran naloži skripto iz omrežja CDN, brskalnik zaupa vsemu, kar vrne tisti strežnik. Če je CDN ogrožen ali je datoteka spremenjena, se spremenjena koda izvede s polnim dostopom do tvoje strani. Subresource Integrity (W3C SRI) to vrzel zapre: pričakovano zgoščeno vrednost datoteke objaviš v atributu integrity, brskalnik zgosti, kar prenese, in skripte ne izvede ali slogovne datoteke ne uporabi, če se vrednosti razlikujeta.

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

Vrednost sestavljajo ime algoritma, vezaj in povzetek bajtov datoteke, kodiran z Base64. Ta primer je zgoščena vrednost kode alert('Hello, world.'); iz specifikacije SRI. Kadar je navedenih več zgoščenih vrednosti, brskalniki upoštevajo samo najmočnejši prisotni algoritem in datoteko sprejmejo, če se ujema katera koli zgoščena vrednost tega algoritma. Tako lahko stran med uvajanjem navede dve različici datoteke.

Zakaj je crossorigin obvezen

Za datoteko z drugega izvora lahko brskalnik njeno celovitost preveri le, če je odgovor pridobljen v načinu CORS, zato oznaka potrebuje atribut crossorigin, strežnik pa mora odgovoriti z glavo Access-Control-Allow-Origin. Za javne omrežja CDN uporabi anonymous (brez piškotkov); use-credentials je za redke zasebne vire. Brez CORS brskalnik datoteko blokira, namesto da bi jo naložil nepreverjeno.

Zakaj to orodje ne prenaša naslovov URL

To orodje zgošča samo kodo, ki jo prilepiš, ali datoteke, ki jih odpreš. Prenos skripte z njenega naslova URL znotraj strani bi deloval le, če tisti strežnik dovoljuje branje z drugih izvorov, obhod tega pa bi zahteval strežnik, ki bi datoteko prenesel namesto tebe in bi tako videl tudi to, kar zgoščaš. Tu vse teče v tvojem brskalniku. Najpreprostejši način je, da prenesi natančno datoteko, na katero se boš sklicval (isto različico in isto pomanjšano izdajo), in jo odpreš tu.

Pogosta vprašanja

Katerega algoritma naj uporabim?

SHA-384 je običajna izbira in tisto, kar objavi večina omrežij CDN. SHA-256 in SHA-512 prav tako podpirajo vsi sodobni brskalniki. MD5 in SHA-1 v SRI nista dovoljena.

Moja zgoščena vrednost je pravilna, brskalnik pa datoteko vseeno blokira. Zakaj?

Preveri, ali strežnik pošilja Access-Control-Allow-Origin in ali ima oznaka crossorigin. Prepričaj se tudi, da CDN streže iste bajte: druga različica, samodejni pomanjševalnik ali manjkajoči zaključni prelom vrstice spremenijo zgoščeno vrednost.

Zakaj prilepljena koda da drugačno zgoščeno vrednost kot datoteka?

Brskalniki v besedilnih poljih pretvorijo konce vrstic Windows (CRLF) v LF, urejevalnik pa lahko doda ali odstrani oznako vrstnega reda bajtov ali zaključni prelom vrstice. Odpri samo datoteko, da zgostiš njene natančne bajte.

Ali potrebujem SRI za datoteke na svoji domeni?

Ščiti pred spremembami po izračunu zgoščene vrednosti, zato je najpomembnejši za gostitelje tretjih strani. Za lastne datoteke je običajno lažje orodje za združevanje, ki zgoščene vrednosti ustvari med gradnjo.

Ali SRI deluje za slike ali pisave?

Atribut integrity je podprt pri <script> in <link rel="stylesheet"> (ter pri <link rel="preload"> ali modulepreload za ti vrsti). Slike in pisave ga ne morejo uporabiti.