Utilia

SRI-tiivisteen luonti

Luo Subresource Integrity (SRI) sha384 -tiiviste JavaScript- tai CSS-tiedostolle ja kopioi valmiit integrity- ja crossorigin-attribuutit paikallisesti.

Liitä tiedoston sisältö tai avaa itse tiedosto: tämä työkalu ei lataa URL-osoitteita. Toisen sivuston skriptin lukeminen vaatisi, että kyseinen palvelin sallii sen (CORS), tai oman palvelimen, joka hakisi sen puolestasi, eikä mikään tässä tiivistämäsi poistu selaimestasi. Tiivistä täsmälleen se tiedosto, jonka tarjoat.

Tiivistettävä

Teksti tiivistetään UTF-8:na. Selaimet muuttavat Windowsin rivinvaihdot (CRLF) LF-merkeiksi liitetyssä tekstissä, ja yksikin muuttunut tavu rikkoo tiivisteen: avaa epäselvissä tapauksissa itse tiedosto.

Algoritmit

URL kirjoitetaan vain koodinpätkään, sitä ei koskaan haeta. Jätä tyhjäksi, jos haluat käyttää tiedostonimeä.

Näin luot SRI-tiivisteen

  1. Valitse kohdassa Tiivistettävä Liitetty koodi tai Tiedostot.
  2. Liitä skriptin tai tyylitiedoston täsmällinen sisältö kenttään Skriptin tai tyylitiedoston sisältö ja paina Luo SRI-tiiviste, tai pudota yksi tai useampi .js- ja .css-tiedosto pudotusalueelle. Tiivisteet päivittyvät kirjoittaessasi.
  3. Jätä SHA-384 (suositus) valituksi tai lisää SHA-256 ja SHA-512. Jokainen valittu algoritmi lisää arvoon yhden osan.
  4. Valitse Tunniste (automaattinen tiedostonimestä, <script>, <script type="module"> tai <link rel="stylesheet">), kirjoita Resurssin URL koodinpätkää varten (valinnainen) ja valitse crossorigin-tila.
  5. Kopioi integrity-arvo tai koko tunniste.
  6. Jos haluat tarkistaa jo käyttämäsi tunnisteen, liitä sen arvo tai koko tunniste kenttään Tarkista olemassa oleva integrity-arvo (valinnainen).

Mitä Subresource Integrity tekee

Kun sivu lataa skriptin CDN-palvelusta, selain luottaa siihen, mitä kyseinen palvelin palauttaa. Jos CDN on vaarantunut tai tiedostoa on muutettu, muokattu koodi suoritetaan täysin oikeuksin sivullasi. Subresource Integrity (W3C SRI) sulkee tämän aukon: julkaiset tiedoston odotetun tiivisteen integrity-attribuutissa, selain tiivistää lataamansa tiedoston, eikä se suorita skriptiä tai ota tyylitiedostoa käyttöön, jos tiivisteet eroavat.

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

Arvo koostuu algoritmin nimestä, viivasta ja tiedoston tavujen Base64-koodatusta tiivisteestä. Tuo esimerkki on SRI-määrittelyn esimerkki lauseen alert('Hello, world.'); tiivisteestä. Kun luettelossa on useita tiivisteitä, selaimet katsovat vain vahvinta läsnä olevaa algoritmia ja hyväksyvät tiedoston, jos jokin kyseisen algoritmin tiiviste täsmää. Näin sivusto voi luetella tiedoston kaksi versiota käyttöönoton aikana.

Miksi crossorigin on pakollinen

Toisen alkuperän tiedoston eheyden selain voi tarkistaa vain, jos vastaus haetaan CORS-tilassa. Tunnisteessa on siis oltava crossorigin-attribuutti, ja palvelimen on vastattava Access-Control-Allow-Origin-otsakkeella. Käytä julkisille CDN-palveluille arvoa anonymous (ei evästeitä); use-credentials on harvinaisille yksityisille resursseille. Ilman CORSia selain estää tiedoston sen sijaan, että lataisi sen tarkistamatta.

Miksi tämä työkalu ei hae URL-osoitteita

Tämä työkalu tiivistää vain liittämääsi koodia tai avaamiasi tiedostoja. Skriptin lataaminen sen URL-osoitteesta sivun sisällä toimisi vain, jos kyseinen palvelin sallii ristiinalkuperälukemisen, ja sen kiertäminen vaatisi palvelimen, joka hakisi tiedoston puolestasi ja näkisi samalla, mitä tiivistät. Kaikki tässä toimii selaimessasi. Yksinkertaisin tapa on ladata täsmälleen se tiedosto, johon viittaat (sama versio ja sama minimoitu käännös), ja avata se tässä.

Usein kysytyt kysymykset

Mitä algoritmia kannattaa käyttää?

SHA-384 on tavallinen valinta ja sitä useimmat CDN-palvelut julkaisevat. Kaikki nykyselaimet tukevat myös SHA-256:ta ja SHA-512:ta. MD5 ja SHA-1 eivät ole sallittuja SRI:ssä.

Tiivisteeni on oikein, mutta selain estää tiedoston silti. Miksi?

Tarkista, että palvelin lähettää Access-Control-Allow-Origin-otsakkeen ja että tunnisteessa on crossorigin. Varmista myös, että CDN tarjoaa samat tavut: eri versio, automaattinen minimoija tai puuttuva viimeinen rivinvaihto muuttavat kaikki tiivisteen.

Miksi liittämäni koodi antaa eri tiivisteen kuin tiedosto?

Selaimet muuttavat Windowsin rivinvaihdot (CRLF) LF-merkeiksi tekstikentissä, ja editori voi lisätä tai poistaa tavujärjestysmerkin tai viimeisen rivinvaihdon. Avaa itse tiedosto, jotta sen täsmälliset tavut tiivistetään.

Tarvitsenko SRI:n oman verkkotunnukseni tiedostoille?

Se suojaa muutoksilta, jotka on tehty tiivisteen laskemisen jälkeen, joten se on tärkein kolmannen osapuolen palvelimille. Omille tiedostoille helpompi ratkaisu on yleensä paketoija, joka luo tiivisteet käännösvaiheessa.

Toimiiko SRI kuville tai fonteille?

integrity-attribuuttia tuetaan <script>- ja <link rel="stylesheet">-tunnisteissa (sekä näiden <link rel="preload">- tai modulepreload-esiladauksessa). Kuvat ja fontit eivät voi käyttää sitä.