SRI-Hash

Nach W3C SRI

Subresource-Integrity-Hash (sha256/384/512) für extern eingebundene Skripte.

Was ist das, und wann brauche ich es?

Was ist das?

SRI (Subresource Integrity) ist ein Hash, den Sie zu jedem extern eingebundenen Skript- oder Stylesheet-Tag (<script src="...">, <link rel="stylesheet">) hinzufügen. Der Browser lädt die Datei, berechnet den Hash und vergleicht: weicht er ab, wird die Datei nicht ausgeführt.

Damit schützen Sie sich gegen kompromittierte CDN-Anbieter und versehentliche Datei-Änderungen. Wenn ein Angreifer das jQuery-CDN übernimmt und schädlichen Code einspielt, blockt der Browser Ihre Seite den modifizierten Code.

Wann brauche ich das?

Sobald Sie Skripte oder Stylesheets von einem fremden Server laden - typisch: CDN-Pfade wie cdnjs, jsdelivr, unpkg. Für Dateien aus dem eigenen Server-Pfad ist SRI nicht nötig.

Achtung: SRI greift nur für statische Datei-Versionen. Bei rotierenden Versionen (z. B. immer "latest") müssen Sie den Hash bei jedem Update erneuern - oder die Versionsangabe in der URL fixieren.

SRI-Hashes binden eine Ressource an genau diesen Byte-Inhalt. Wenn ein CDN den Inhalt ändert oder eine MITM-Komponente das Skript ersetzt, verweigert der Browser die Ausführung. Alle drei Algorithmen (sha256, sha384, sha512) sind nach W3C SRI § 3.4.3 zugelassen und kryptographisch sicher; die Wahl ist primär Konvention - sha384 ist die häufigste Empfehlung der Web Application Security Working Group.

Mehrere Hashes pro Ressource sind erlaubt: integrity="sha384-X sha512-Y" (Space-getrennt). Der Browser nimmt den stärksten verifizierbaren Hash. Nützlich beim Migrieren zwischen Algorithmen. Geltungsbereich: SRI greift nur auf <script>, <link rel="stylesheet">, <link rel="preload"> und <link rel="modulepreload">. Auf Bildern oder iframes hat integrity keine Wirkung.

crossorigin="anonymous" ist bei Same-Origin-Ressourcen nicht zwingend, vermeidet aber Cache-Inkonsistenzen. crossorigin="use-credentials" nur setzen, wenn der CDN-Endpunkt Cookies zwingend mitschicken muss - das schließt das gemeinsame Browser-Cache aus.