Subresource Integrity

Subresource integrity mahdollistaa vähemmän luotetusta lähteestä kuten esimerkiksi CDN-palveluista ladattavan JavaScript-kirjastojen eheyden tarkistamisen selaimessa. Subresource integrityä voidaan käyttää myös joidenkin toimitusketjuhyökkäysten estämiseen: subresource integrity hylkää hyökkääjän muuttamat JavaScript-riippuvuudet, ellei hyökkääjä muuta myös eheyden tarkistukseen käytettäviä tiivisteitä.

Subresource integrityä tulisi käyttää kaikelle JavaScriptille, joka ladataan kolmannen osapuolen hallussa olevasta sijainnista.

Käytettäessä subresource integrity -tarkisteita resurssit on haettava lähteestä, joka osoittaa resurssin tunnettuun ja muuttumattomaan versioon. Subresource integrityä käyttäessä ei ole mahdollista osoittaa ajoittain muuttuvaan, viimeisimpään (’latest’) versioon.

Esimerkkinä jQuery-kirjaston version 3.3.1 sisällyttäminen sivulle ja sen eheyden tarkistus SHA-256-tiivisteen avulla:

<script src="https://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="
crossorigin="anonymous"></script>

Kirjaston SHA-256-tiiviste Base64-muodossa voidaan laskea seuraavalla komennolla, jos lähdeosoitteeseen voidaan luottaa komennon ajohetkellä:

curl -s https://code.jquery.com/jquery-3.3.1.min.js | openssl dgst -sha256 -binary | openssl base64 -A