Utilia

SRI-hash generátor

Generálj Subresource Integrity (SRI) sha384 hasheket JavaScript- vagy CSS-fájlhoz, és másold ki a kész integrity és crossorigin attribútumokat, helyben.

Illeszd be a fájl tartalmát, vagy nyisd meg magát a fájlt: ez az eszköz nem tölt le URL-eket. Egy másik oldalról érkező szkript beolvasásához az adott szervernek engedélyeznie kellene (CORS), vagy egy saját szerverünknek kellene lekérnie helyetted, és amit itt hashelsz, az soha nem hagyja el a böngésződet. Pontosan azt a fájlt hasheld, amelyet kiszolgálsz.

Hash

A szöveget UTF-8-ként hasheli az eszköz. A böngészők a beillesztett szövegben a Windows sorvégeket (CRLF) LF-re alakítják, és egyetlen megváltozott bájt is elrontja a hasht: kétség esetén nyisd meg magát a fájlt.

Algoritmusok

Az URL csak a kódrészletbe kerül beírásra, soha nem kérjük le. Hagyd üresen, ha a fájlnevet szeretnéd használni.

Hogyan generálj SRI-hasht

  1. A Hash résznél válaszd a Beillesztett kód vagy a Fájlok lehetőséget.
  2. Illeszd be a szkript vagy a stíluslap pontos tartalmát A szkript vagy stíluslap tartalma mezőbe, és nyomd meg az SRI-hash generálása gombot, vagy húzz egy vagy több .js és .css fájlt a célterületre. A hashek gépelés közben frissülnek.
  3. Hagyd bejelölve az SHA-384 (ajánlott) algoritmust, vagy vedd hozzá az SHA-256-ot és az SHA-512-t. Minden bejelölt algoritmus egy további tokent ad az értékhez.
  4. Válaszd ki a Címkét (automatikus a fájlnév alapján, <script>, <script type="module"> vagy <link rel="stylesheet">), add meg Az erőforrás URL-jét a kódrészlethez (nem kötelező), és válaszd ki a crossorigin módot.
  5. Másold ki az integrity értéket vagy a teljes címkét.
  6. Egy már használt címke ellenőrzéséhez illeszd be az értékét vagy a teljes címkét a Meglévő integrity érték ellenőrzése (nem kötelező) mezőbe.

Mit csinál a Subresource Integrity

Amikor egy oldal CDN-ről tölt be szkriptet, a böngésző megbízik abban, amit a szerver visszaad. Ha a CDN sérül, vagy a fájlt módosítják, a módosított kód teljes hozzáféréssel fut az oldaladon. A Subresource Integrity (W3C SRI) ezt a rést zárja be: a fájl várt hash-ét az integrity attribútumban teszed közzé, a böngésző kiszámítja a letöltött fájl hash-ét, és megtagadja a szkript futtatását vagy a stíluslap alkalmazását, ha a kettő eltér.

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

Az érték az algoritmus neve, egy kötőjel és a fájl bájtjainak Base64-kódolt kivonata. Ez a példa az SRI-specifikációban szereplő alert('Hello, world.'); hash-e. Ha több hash szerepel, a böngészők csak a jelenlévő legerősebb algoritmust nézik, és akkor fogadják el a fájlt, ha az algoritmus bármelyik hash-e egyezik. Így tud egy oldal két fájlverziót is felsorolni egy bevezetés alatt.

Miért kötelező a crossorigin

Másik származási helyen lévő fájl esetén a böngésző csak akkor tudja ellenőrizni az integritást, ha a választ CORS módban kéri le, ezért a címkének crossorigin attribútumra van szüksége, a szervernek pedig Access-Control-Allow-Origin fejléccel kell válaszolnia. Nyilvános CDN-ekhez használd az anonymous értéket (sütik nélkül); a use-credentials ritka, privát erőforrásokhoz való. CORS nélkül a böngésző blokkolja a fájlt, ahelyett hogy ellenőrzés nélkül betöltené.

Miért nem tölt le URL-eket az eszköz

Az eszköz csak a beillesztett kódot vagy a megnyitott fájlokat hasheli. Egy szkript URL-ből való letöltése az oldalon belül csak akkor működne, ha az adott szerver engedélyezi a származási helyek közötti olvasást, ennek megkerüléséhez pedig egy szerverre lenne szükség, amely lekéri helyetted a fájlt, és közben azt is látná, amit hashelsz. Itt minden a böngésződben fut. A legegyszerűbb módszer, ha letöltöd pontosan azt a fájlt, amelyre hivatkozni fogsz (ugyanazt a verziót és ugyanazt a minifikált buildet), és megnyitod itt.

Gyakori kérdések

Melyik algoritmust használjam?

Az SHA-384 a szokásos választás, és a legtöbb CDN ezt teszi közzé. Az SHA-256-ot és az SHA-512-t szintén támogatja minden modern böngésző. Az MD5 és az SHA-1 nem engedélyezett az SRI-ben.

A hash helyes, a böngésző mégis blokkolja a fájlt. Miért?

Ellenőrizd, hogy a szerver küld-e Access-Control-Allow-Origin fejlécet, és hogy a címkén szerepel-e a crossorigin. Győződj meg arról is, hogy a CDN ugyanazokat a bájtokat szolgálja ki: egy másik verzió, egy automatikus minifikáló vagy egy hiányzó záró sortörés mind megváltoztatja a hasht.

Miért ad a beillesztett kód más hasht, mint a fájl?

A böngészők a szövegmezőkben a Windows sorvégeket (CRLF) LF-re alakítják, a szerkesztő pedig hozzáadhat vagy eltávolíthat egy bájtsorrend-jelet vagy egy záró sortörést. Nyisd meg magát a fájlt, hogy a pontos bájtjait hashelhesd.

Kell SRI a saját domainemen lévő fájlokhoz?

A hash kiszámítása utáni módosítások ellen véd, ezért a harmadik fél szervereinél számít a legtöbbet. A saját fájlokhoz általában könnyebb egy olyan csomagoló (bundler), amely a buildkor generálja a hasheket.

Működik az SRI képeknél vagy betűtípusoknál?

Az integrity attribútumot a <script> és a <link rel="stylesheet"> támogatja (valamint ezek <link rel="preload"> vagy modulepreload változata). Képek és betűtípusok nem használhatják.