Utilia

Generátor SRI hashe

Vygeneruj hashe Subresource Integrity (SRI) sha384 pro soubor JavaScriptu nebo CSS a zkopíruj hotové atributy integrity a crossorigin, lokálně.

Vlož obsah souboru nebo otevři samotný soubor: tento nástroj nestahuje adresy URL. Čtení skriptu z jiného webu by vyžadovalo, aby to ten server povolil (CORS), nebo vlastní server, který by ho stáhl za tebe, a nic, co zde hashuješ, neopouští tvůj prohlížeč. Hashuj přesně ten soubor, který budeš poskytovat.

Hash

Text se hashuje jako UTF-8. Prohlížeče ve vloženém textu převádějí konce řádků Windows (CRLF) na LF a jediný změněný bajt hash rozbije: v případě pochybností otevři samotný soubor.

Algoritmy

Adresa URL se jen zapíše do úryvku, nikdy se nevyžaduje. Nech pole prázdné a použije se název souboru.

Jak vygenerovat SRI hash

  1. V části Hash vyber Vložený kód nebo Soubory.
  2. Vlož přesný obsah skriptu nebo stylopisu do pole Obsah skriptu nebo stylopisu a stiskni Vygenerovat SRI hash, nebo přetáhni jeden či více souborů .js a .css na oblast pro přetažení. Hashe se aktualizují během psaní.
  3. Nech zaškrtnuté SHA-384 (doporučeno) nebo přidej SHA-256 a SHA-512. Každý zaškrtnutý algoritmus přidá do hodnoty jeden token.
  4. Vyber Značku (automaticky podle názvu souboru, <script>, <script type="module"> nebo <link rel="stylesheet">), napiš Adresu URL zdroje pro úryvek (volitelnou) a zvol režim crossorigin.
  5. Zkopíruj hodnotu integrity nebo celou značku.
  6. Chceš-li zkontrolovat značku, kterou už používáš, vlož její hodnotu nebo celou značku do pole Zkontrolovat existující hodnotu integrity (volitelné).

K čemu Subresource Integrity slouží

Když stránka načítá skript z CDN, prohlížeč důvěřuje tomu, co daný server vrátí. Pokud je CDN napadeno nebo se soubor změní, upravený kód se spustí s plným přístupem k tvé stránce. Subresource Integrity (W3C SRI) tuto mezeru zavírá: očekávaný hash souboru uvedeš v atributu integrity, prohlížeč zahashuje to, co stáhne, a pokud se oba liší, skript nespustí ani stylopis neaplikuje.

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

Hodnotu tvoří název algoritmu, pomlčka a digest bajtů souboru zakódovaný v Base64. Uvedený příklad je hash řetězce alert('Hello, world.'); ze specifikace SRI. Pokud je uvedeno několik hashů, prohlížeče berou v úvahu jen nejsilnější přítomný algoritmus a soubor přijmou, když se shoduje kterýkoli hash tohoto algoritmu. Tak může web při postupném nasazování uvést dvě verze souboru.

Proč je crossorigin povinný

U souboru z jiného původu (origin) může prohlížeč zkontrolovat integritu jen tehdy, když se odpověď načítá v režimu CORS, takže značka potřebuje atribut crossorigin a server musí odpovědět hlavičkou Access-Control-Allow-Origin. Pro veřejná CDN používej anonymous (bez cookies); use-credentials je pro vzácné soukromé zdroje. Bez CORS prohlížeč soubor zablokuje, místo aby ho načetl nekontrolovaně.

Proč tento nástroj nestahuje adresy URL

Tento nástroj hashuje jen kód, který vložíš, nebo soubory, které otevřeš. Stažení skriptu z jeho adresy URL uvnitř stránky by fungovalo, jen když tento server povolí čtení z jiného původu, a obejít to by vyžadovalo server, který by soubor stáhl za tebe a viděl by tak i to, co hashuješ. Všechno zde běží ve tvém prohlížeči. Nejjednodušší je stáhnout přesný soubor, na který budeš odkazovat (stejnou verzi a stejný minifikovaný build), a otevřít ho zde.

Časté dotazy

Který algoritmus mám použít?

SHA-384 je obvyklá volba a většina CDN publikuje právě ji. SHA-256 a SHA-512 podporují také všechny moderní prohlížeče. MD5 a SHA-1 se v SRI nepovolují.

Hash je správný, ale prohlížeč soubor přesto blokuje. Proč?

Zkontroluj, že server posílá Access-Control-Allow-Origin a že značka má crossorigin. Ujisti se také, že CDN poskytuje stejné bajty: jiná verze, automatický minifikátor nebo chybějící zalomení na konci souboru hash změní.

Proč vložený kód dává jiný hash než soubor?

Prohlížeče v textových polích převádějí konce řádků Windows (CRLF) na LF a editor může přidat nebo odebrat značku pořadí bajtů (BOM) či závěrečný nový řádek. Otevři samotný soubor, aby se zahashovaly jeho přesné bajty.

Potřebuji SRI pro soubory na vlastní doméně?

Chrání před změnami provedenými po výpočtu hashe, takže nejvíce záleží na hostitelích třetích stran. U vlastních souborů je obvykle jednodušší bundler, který hashe generuje při sestavení.

Funguje SRI pro obrázky nebo písma?

Atribut integrity je podporován u <script> a <link rel="stylesheet"> (a u <link rel="preload"> či modulepreload pro ně). Obrázky a písma ho použít nemohou.