Zum Inhalt springen

Subresource-Integrity-Hash

Subresource Integrity Hash

Berechnet das Subresource-Integrity-Attribut (sha256/384/512) für ein Skript oder Stylesheet, das Sie einfügen oder ablegen.

Ein `<script src>`, das auf ein CDN zeigt, ist eine Dauererlaubnis für dieses CDN, beliebigen Code in den Browsern Ihrer Nutzer auszuführen. Ein Subresource-Integrity-Attribut widerruft sie: Der Browser weigert sich, eine Datei auszuführen, deren Hash nicht mit dem übereinstimmt, den Sie festgelegt haben.

⚡ Lokal, mit optionaler Server-Unterstützungsriintegritywebhash

Genau die Datei ablegen, die ausgeliefert wird

Das Skript oder Stylesheet, das Sie ausliefern werden. Es wird unverändert gehasht.

Gehasht mit WebCrypto in Ihrem Browser — derselbe Digest, gegen den der Browser später prüft. Ein URL-Feld gibt es bewusst nicht: eine entfernte Datei von dieser Seite aus zu holen, um sie zu hashen, würde entweder an CORS scheitern oder zu einem SSRF-Vektor werden, und ein Browser kann einen Host nicht auflösen und ihn dann festnageln, wie ein Server es kann. Legen Sie die Datei ein, die Sie tatsächlich ausliefern.

So funktioniert es

  1. Geben Sie ihm die Datei oder die URL

    Legen Sie genau die Datei ab, die Sie ausliefern werden, oder rufen Sie eine URL ab. Der Hash geht über die Bytes, eine Datei und eine URL, die sich um einen Zeilenumbruch unterscheiden, ergeben also unterschiedliche Attribute.

  2. Kopieren Sie das ganze Attribut

    Die Ausgabe ist `integrity="sha384-…"`. Fügen Sie es zusammen mit `crossorigin="anonymous"` in das Tag ein – ohne das ist eine Cross-Origin-Ressource undurchsichtig, und die Integrität kann nicht geprüft werden.

  3. Fixieren Sie eine Version, kein bewegliches Tag

    Ein Integrity-Attribut gegen eine `@latest`-URL bricht die Website an dem Tag, an dem das CDN veröffentlicht. Zeigen Sie auf eine exakte Version und aktualisieren Sie beides zusammen.

Häufige Fragen

Welchen Algorithmus sollte ich verwenden?

sha384 ist die übliche Wahl und das, was die meisten CDNs veröffentlichen. sha256 wird akzeptiert und sha512 ist stärker, aber der Unterschied ist nicht die Schwachstelle in diesem Design – die falsche Version zu fixieren ist es.

Das Skript lädt nicht mehr, seit ich es hinzugefügt habe.

Fast immer eines von drei Dingen: Die Datei hat sich auf dem CDN geändert, `crossorigin="anonymous"` fehlt, oder der Hash wurde von einem anderen Build genommen als dem, der ausgeliefert wird (etwa eine minifizierte gegenüber einer unminifizierten Datei).

Schützt SRI vor einem kompromittierten Skript, das von Anfang an feindlich war?

Nein. Es garantiert, dass Sie die Bytes bekommen, die Sie festgelegt haben, mehr nicht. War die festgelegte Version bereits mit einer Hintertür versehen, liefert SRI die Hintertür jedes Mal getreu aus.

Eingabe aus

Danach

Diese Tools nehmen an, was dieses hier erzeugt, das Ergebnis kann also direkt weiter.