SRI-Integrität
integrity = Algorithmus + '-' + Base64(HASH(Bytes der Ressource))
Berechne den Subresource-Integrity-Wert in SHA-256, SHA-384 oder SHA-512 aus eingefügtem Inhalt, einer lokalen Datei oder einer CDN-URL und kopiere den fertigen <script>- oder <link>-Tag mit crossorigin="anonymous".
Wird von deinem Browser geladen: Das CDN muss CORS erlauben (jsDelivr, cdnjs und unpkg tun das).
Dieser Generator berechnet den Subresource-Integrity-Wert (SRI) eines Skripts oder Stylesheets und erzeugt den passenden HTML-Tag. Er richtet sich an Entwickler, die Bibliotheken von einem CDN laden und wollen, dass der Browser jede veränderte Datei blockiert.
Subresource Integrity (eine W3C-Spezifikation) erlaubt es, einem <script>- oder <link rel="stylesheet">-Tag ein integrity-Attribut mit dem erwarteten Hash der Ressource hinzuzufügen. Der Wert besteht aus dem Namen des Algorithmus, einem Bindestrich und dem Base64-kodierten binären Hash: Eine Datei, die genau console.log("hello"); enthält, ergibt sha384-ym/3cF/gAcW1/eerNQGFaOSOuU2LHI6RYvChaVur/G+PkVozZ5Zo8Uu5R2S2zm7C. Beim Laden berechnet der Browser den Hash der empfangenen Bytes neu und führt das Skript nicht aus bzw. wendet das Stylesheet nicht an, wenn er nicht übereinstimmt. Erlaubt sind nur SHA-256, SHA-384 und SHA-512; SHA-384 ist die Voreinstellung, wie in den Beispielen der Spezifikation und von MDN.
Bei einer Ressource von einem anderen Origin muss der Browser die Antwort lesen können, um sie zu hashen, und dafür braucht es eine CORS-Anfrage: das Attribut crossorigin="anonymous" auf der Seite und einen Access-Control-Allow-Origin-Header vom CDN. Deshalb ergänzt das Tool crossorigin="anonymous" in den Attributen und im erzeugten Tag. Im URL-Modus lädt dein Browser die Datei direkt herunter, ohne Zwischenserver; das klappt mit CDNs, die CORS erlauben, etwa jsDelivr, cdnjs oder unpkg. Die entsprechende Berechnung auf der Kommandozeile lautet openssl dgst -sha384 -binary datei.js | openssl base64 -A.
Füge den Inhalt der Datei ein, wähle eine lokale Datei oder gib die URL eines CDN ein: Im letzten Fall lädt dein Browser die Datei direkt herunter.
Behalte SHA-384 als Voreinstellung oder wähle SHA-256 oder SHA-512 und gib an, ob es sich um ein Skript oder ein Stylesheet handelt.
Übernimm nur den integrity-Wert, die Attribute integrity und crossorigin="anonymous" oder den vollständigen <script>- bzw. <link rel="stylesheet">-Tag.
integrity = Algorithmus + '-' + Base64(HASH(Bytes der Ressource))
Gib die versionierte URL ein, zum Beispiel https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css, um den <link>-Tag mit integrity zu erhalten. Wird das CDN kompromittiert und liefert eine andere Datei, blockiert der Browser sie.
Jede neue Version einer Datei ändert ihren Hash. Berechne das integrity-Attribut neu, sobald du die versionierte URL änderst, sonst wird die Ressource in Produktion blockiert.
PCI DSS 4.0 (Anforderung 6.4.3) verlangt, die Integrität jedes auf einer Zahlungsseite geladenen Skripts sicherzustellen. SRI ist ein gängiger Weg für Drittanbieter-Skripte mit stabilem Inhalt: Erzeuge für jedes den integrity-Wert.
Eingabe
Ressource: Eingefügter Inhalt; Inhalt der Ressource (UTF-8): abc; Algorithmus: SHA-256Ergebnis
Integrity-Wert: sha256-ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=Das ist eine vom W3C standardisierte Sicherheitsfunktion der Browser, die prüft, ob eine von Dritten geladene Datei verändert wurde. Du trägst den erwarteten Hash ins integrity-Attribut ein; passt die empfangene Datei nicht, wird sie weder ausgeführt noch angewendet. Das schützt vor einem kompromittierten CDN oder einer unterwegs veränderten Datei.
Alle drei werden akzeptiert und sind sicher. SHA-384 ist die gängigste Wahl und die Voreinstellung des Tools; SHA-512 passt ebenfalls, und SHA-256 bleibt gültig. Du kannst mehrere durch Leerzeichen getrennte Werte in integrity angeben: Der Browser nutzt dann den stärksten Algorithmus.
Bei einer Ressource von einem anderen Origin kann der Browser den Inhalt, und damit den Hash, nur über eine CORS-Anfrage lesen. Ohne das Attribut crossorigin ist die Antwort opak, und die Ressource wird blockiert. Der Wert anonymous bedeutet, dass keine Cookies oder Zugangsdaten mitgesendet werden.
Der Browser lehnt die Ressource ab und meldet in der Konsole einen Fehler zum integrity-Attribut. Das Skript läuft nicht oder das Stylesheet wird nicht angewendet, was die Seite kaputt machen kann. Prüfe, ob die URL versioniert ist, und erzeuge den Hash aus der tatsächlich ausgelieferten Datei neu.
Dein Browser lädt die Datei herunter und wendet die CORS-Regeln an: Sendet der Server keinen Access-Control-Allow-Origin-Header, wird das Lesen verweigert. Dann würde SRI für diese von einer anderen Domain geladene Datei auch nicht funktionieren. Lade sie herunter und nutze den Datei-Modus, oder wähle ein CORS-fähiges CDN wie jsDelivr, cdnjs oder unpkg.
Nein, beide ergänzen sich. SRI garantiert, dass sich eine bestimmte Datei nicht geändert hat, während eine CSP festlegt, von welchen Origins Skripte kommen dürfen, und eingeschleuste Skripte blockiert. Für eine Website, die auf CDNs setzt, kombinierst du am besten eine strenge CSP mit SRI für jede Drittanbieter-Ressource.
Verwandte Werkzeuge
Werkzeuge, die diesem ähnlich sind oder es ergänzen.
Erstelle eine Content Security Policy Direktive für Direktive – mit HTTP-Header, Meta-Tag und Warnungen.
Erzeuge HSTS, nosniff, Referrer-Policy, Permissions-Policy, COOP/COEP/CORP und X-Frame-Options für Nginx oder Apache.
Berechne MD5-, SHA-1-, SHA-256-, SHA-384- und SHA-512-Hashes eines Textes oder einer Datei auf einmal.
Verstehe, wie SRI-Hashes unerwartete Änderungen an externen Skripten und Stylesheets erkennen und wo die Grenzen liegen.
Verstehe die Schutzschichten einer Website: HTTPS, HTTP-Sicherheitsheader, CSP, SRI, Authentifizierung, Passwörter und Integrität.
Unterscheide Hashing, Verschlüsselung und Kodierung und verstehe SHA-256, SHA-3, Kollisionen sowie die Grenzen eines Hashes ohne Authentisierung.
Verstehe, wann Verschlüsselung, Hashing, HMAC oder PBKDF2 für Vertraulichkeit, Integrität, Authentifizierung und Passwörter eingesetzt werden.