Utilia

SRI heš generator

Generiši Subresource Integrity (SRI) sha384 heševe za JavaScript ili CSS fajl i kopiraj gotove atribute integrity i crossorigin, lokalno u pregledaču.

Nalepi sadržaj fajla ili otvori sam fajl: ovaj alat ne preuzima URL adrese. Čitanje skripte sa drugog sajta zahtevalo bi da taj server to dozvoli (CORS) ili naš sopstveni server koji bi je preuzeo umesto tebe, a ništa što ovde heširaš ne napušta tvoj pregledač. Heširaj tačan fajl koji ćeš objaviti.

Heš

Heš se računa nad tekstom kao UTF-8. Pregledači pretvaraju Windows prelome redova (CRLF) u LF u nalepljenom tekstu, a jedan promenjen bajt kvari heš: kad sumnjaš, otvori sam fajl.

Algoritmi

URL se samo upisuje u isečak, nikada se ne poziva. Ostavi prazno da se koristi ime fajla.

Kako se generiše SRI heš

  1. Pod Heš izaberi Nalepljen kod ili Fajlovi.
  2. Nalepi tačan sadržaj skripte ili stilskog lista u Sadržaj skripte ili stilskog lista i pritisni Generiši SRI heš, ili prevuci jedan ili više .js i .css fajlova na zonu za otpuštanje. Heševi se ažuriraju dok kucaš.
  3. Ostavi označen SHA-384 (preporučeno), ili dodaj SHA-256 i SHA-512. Svaki označeni algoritam dodaje jedan token vrednosti.
  4. Izaberi Oznaka (automatski prema imenu fajla, <script>, <script type="module"> ili <link rel="stylesheet">), upiši URL resursa za isečak (opciono) i izaberi režim crossorigin.
  5. Kopiraj vrednost integrity ili celu oznaku.
  6. Da proveriš oznaku koju već koristiš, nalepi njenu vrednost ili celu oznaku u Proveri postojeću vrednost integrity (opciono).

Šta radi Subresource Integrity

Kada stranica učitava skriptu sa CDN-a, pregledač veruje svemu što taj server vrati. Ako je CDN kompromitovan ili je fajl izmenjen, izmenjeni kod se izvršava sa punim pristupom tvojoj stranici. Subresource Integrity (W3C SRI) zatvara taj procep: u atributu integrity objavljuješ očekivani heš fajla, pregledač izračuna heš onoga što preuzme i odbija da pokrene skriptu ili primeni stilski list ako se ta dva razlikuju.

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

Vrednost je ime algoritma, crtica i Base64 zapis digesta bajtova fajla. Taj primer je heš za alert('Hello, world.'); iz SRI specifikacije. Kada je navedeno više heševa, pregledači gledaju samo najjači prisutni algoritam i prihvataju fajl ako se poklapa bilo koji heš tog algoritma. Tako sajt može da navede dve verzije fajla tokom postepenog uvođenja.

Zašto je crossorigin obavezan

Za fajl sa drugog porekla pregledač može da proveri integritet samo ako se odgovor preuzima u CORS režimu, pa oznaka mora da ima atribut crossorigin, a server mora da odgovori zaglavljem Access-Control-Allow-Origin. Koristi anonymous (bez kolačića) za javne CDN-ove; use-credentials je za retke privatne resurse. Bez CORS-a pregledač blokira fajl umesto da ga učita neproveren.

Zašto ovaj alat ne preuzima URL adrese

Ovaj alat računa heš samo za kod koji nalepiš ili fajlove koje otvoriš. Preuzimanje skripte sa njene adrese unutar stranice radilo bi samo kada taj server dozvoljava čitanje sa drugog porekla, a zaobilaženje toga zahtevalo bi server koji preuzima fajl umesto tebe, i koji bi video i šta heširaš. Sve ovde radi u tvom pregledaču. Najjednostavniji način je da preuzmeš tačan fajl na koji ćeš se pozvati (ista verzija i isti minifikovani build) i otvoriš ga ovde.

Česta pitanja

Koji algoritam da koristim?

SHA-384 je uobičajen izbor i ono što većina CDN-ova objavljuje. SHA-256 i SHA-512 takođe podržavaju svi savremeni pregledači. MD5 i SHA-1 nisu dozvoljeni u SRI.

Moj heš je tačan, a pregledač ipak blokira fajl. Zašto?

Proveri da server šalje Access-Control-Allow-Origin i da oznaka ima crossorigin. Takođe se uveri da CDN servira iste bajtove: druga verzija, automatski minifikator ili nedostajući završni prelom reda menjaju heš.

Zašto nalepljen kod daje drugačiji heš od fajla?

Pregledači pretvaraju Windows prelome redova (CRLF) u LF u tekstualnim poljima, a uređivač može da doda ili ukloni oznaku redosleda bajtova ili završni novi red. Otvori sam fajl da se izračuna heš njegovih tačnih bajtova.

Da li mi treba SRI za fajlove na mom domenu?

Štiti od promena napravljenih posle izračunavanja heša, pa je najvažniji za spoljne hostove. Za sopstvene fajlove obično je lakše koristiti bandler koji pravi heševe pri izgradnji.

Da li SRI radi za slike ili fontove?

Atribut integrity podržan je na <script> i <link rel="stylesheet"> (i na <link rel="preload"> ili modulepreload za njih). Slike i fontovi ga ne mogu koristiti.