SRI für WordPress konfigurieren
Schritt-für-Schritt: Subresource Integrity in WordPress über script_loader_tag und style_loader_tag einrichten — mit PHP-Code für functions.php, Plugin-Alternative und Verifizierung.
SRI in WordPress
WordPress lädt externe Scripts und Stylesheets über wp_enqueue_script und wp_enqueue_style. Für SRI stehen zwei WordPress-Filter bereit: script_loader_tag fügt integrity- und crossorigin-Attribute in Script-Tags ein, style_loader_tag macht dasselbe für Stylesheets — ohne Template-Dateien anfassen zu müssen.
Diese Anleitung zeigt alle vier Schritte: Script-SRI via Filter, Stylesheet-SRI, die Plugin-Alternative für Installationen ohne Theme-Anpassungen sowie die Verifizierung. Alle Code-Beispiele gehören in die functions.php Ihres Child-Themes oder eines Must-Use-Plugins.
script_loader_tag Filter für Script-SRI
WordPress generiert Script-Tags intern — Sie können sie nicht direkt editieren. Der script_loader_tag Filter gibt Ihnen den fertigen HTML-Tag zum Modifizieren. Legen Sie eine Hash-Map mit Handle → SHA-384-Hash an und injizieren Sie integrity und crossorigin="anonymous" via str_replace.
// functions.php — Script-SRI via script_loader_tag Filter
function enqueue_scripts_with_sri() {
wp_deregister_script('jquery');
wp_register_script(
'jquery',
'https://code.jquery.com/jquery-3.6.0.min.js',
array(),
'3.6.0',
true
);
wp_enqueue_script('jquery');
}
add_action('wp_enqueue_scripts', 'enqueue_scripts_with_sri');
function add_sri_to_scripts($tag, $handle, $src) {
// Handle → SHA-384-Hash Mapping
$sri_hashes = array(
'jquery' => 'sha384-vtXRMe3mGCbOeY7l30aIg8H9p3GdeSe4IFlP6G8JMa7o7lXvnz3GFKzPxzJdPfGK',
'bootstrap' => 'sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz',
);
if (isset($sri_hashes[$handle])) {
$tag = str_replace(
' src=',
' integrity="' . $sri_hashes[$handle] . '" crossorigin="anonymous" src=',
$tag
);
}
return $tag;
}
add_filter('script_loader_tag', 'add_sri_to_scripts', 10, 3); Fügen Sie den Code in die functions.php Ihres Child-Themes ein — niemals in das Parent-Theme, da Theme-Updates Ihren Code überschreiben. Alternativ legen Sie ein Must-Use-Plugin unter /wp-content/mu-plugins/sri.php an, das Theme-unabhängig aktiv bleibt.
# Hash für eine externe Datei berechnen (Terminal)
curl -s https://code.jquery.com/jquery-3.6.0.min.js \
| openssl dgst -sha384 -binary | openssl base64 -A
# Ergebnis direkt als integrity-Attribut formatieren:
# sha384-vtXRMe3mGCbOeY7l30aIg8H9p3GdeSe4IFlP6G8JMa7o7lXvnz3GFKzPxzJdPfGK
# Alternativ: srihash.org — URL eingeben, Hash kopieren Stylesheet-SRI mit style_loader_tag
Für extern eingebundene CSS-Dateien (Bootstrap, Font Awesome, Google Fonts-CDN-Alternativen) funktioniert das Prinzip identisch — nur der Filtername und die Tag-Struktur weichen ab. Der style_loader_tag Filter gibt vier Parameter: $tag, $handle, $href, $media. Beachten Sie die abweichenden Anführungszeichen im generierten link-Tag.
// functions.php — Stylesheet-SRI via style_loader_tag Filter
function add_sri_to_styles($tag, $handle, $href, $media) {
$sri_style_hashes = array(
'bootstrap-css' => 'sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC',
'font-awesome' => 'sha384-+d0P83n9fGqv4XDJ1GcMOKQLbdNYyTlTQlNLo0PQyMnTKjWFBXl9/fOhlGmgSBKE',
);
if (isset($sri_style_hashes[$handle])) {
$tag = str_replace(
"href='",
"integrity='" . $sri_style_hashes[$handle] . "' crossorigin='anonymous' href='",
$tag
);
}
return $tag;
}
add_filter('style_loader_tag', 'add_sri_to_styles', 10, 4);
// Stylesheet mit versionierter URL registrieren
function enqueue_styles_with_sri() {
wp_enqueue_style(
'bootstrap-css',
'https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css',
array(),
'4.6.2'
);
}
add_action('wp_enqueue_scripts', 'enqueue_styles_with_sri'); bootstrap@4.6.2/dist/css/bootstrap.min.css statt bootstrap/dist/css/bootstrap.min.css. Ändert sich eine Datei auf dem CDN ohne URL-Änderung, schlägt SRI-Verifikation fehl und die Seite bricht. Plugin-Alternative: SRI Hash Plugin
Wenn Sie keine Theme-Anpassungen vornehmen möchten oder ein Managed-WordPress ohne direkten functions.php-Zugang betreiben, ist das SRI Hash Plugin aus dem offiziellen WordPress-Repository eine Alternative. Es berechnet Hashes automatisch beim ersten Laden einer Ressource und speichert sie im Plugin-Cache.
- Automatische Hash-Berechnung für alle enqueued Scripts und Styles
- Admin-Oberfläche zur Hash-Verwaltung und -Aktualisierung
- Cache-Invalidierung bei Plugin-Updates
- Kostenlos im offiziellen WordPress-Repository
Failed to find a valid digest in the 'integrity' attribute. Verifizierung
Nach der Implementierung prüfen Sie, ob integrity- und crossorigin-Attribute korrekt im HTML ausgegeben werden. Nutzen Sie den Seitenquelltext (Strg+U) für eine schnelle Sichtprüfung und die Browser DevTools Console für Integrity-Fehler in Echtzeit.
// Browser DevTools (Console) — SRI-Fehler sehen so aus:
// Failed to find a valid digest in the 'integrity' attribute
// for resource 'https://cdn.example.com/script.js' with
// computed SHA-384 integrity 'sha384-...'.
// Korrektes Markup nach dem Filter sollte enthalten:
// integrity="sha384-..." crossorigin="anonymous"
// Seite im Browser per Rechtsklick → Seitenquelltext anzeigen
// Nach integrity= suchen — Attribut muss vorhanden sein Der Wolf-Agents Web Security Scanner erkennt fehlende SRI-Attribute auf extern eingebundenen Scripts und Stylesheets und bewertet sie im Security-Score. Richten Sie Monitoring ein, um bei zukünftigen Changes sofort benachrichtigt zu werden.
Wie steht Ihre Domain bei Subresource Integrity?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.
Häufig gestellte Fragen
Wie füge ich SRI-Hashes in WordPress ein?
Über den script_loader_tag Filter in functions.php: Sie definieren ein Array mit Handle → Hash-Paaren und der Filter injiziert integrity- und crossorigin-Attribute in den fertigen script-Tag. Derselbe Ansatz funktioniert für Stylesheets mit dem style_loader_tag Filter.
Muss ich für jedes WordPress-Plugin einen SRI-Hash hinterlegen?
Nur für extern geladene Ressourcen (z.B. von CDNs). Scripts, die WordPress selbst aus /wp-content/ ausliefert, liegen auf Ihrem Server und werden durch SRI nicht zusätzlich geschützt — hier ist serverseitige Dateisystemsicherheit relevanter. SRI adressiert speziell das Risiko kompromittierter externer CDNs.
Was passiert, wenn ein Plugin sein Script aktualisiert und der Hash nicht mehr stimmt?
Der Browser blockiert die Ressource — die Seite kann dadurch teilweise oder vollständig nicht funktionieren. Aktualisieren Sie den Hash in functions.php sofort nach jedem Plugin-Update, das externe Scripts einbindet. Das SRI Hash Plugin kann diesen Prozess halbautomatisch unterstützen.
Wie berechne ich den SHA-384-Hash einer externen Datei?
Im Terminal: curl -s https://cdn.example.com/script.js | openssl dgst -sha384 -binary | openssl base64 -A. Alternativ nutzen Sie den SRI Hash Generator unter srihash.org — URL eingeben, Hash kopieren. Wichtig: Immer die exakt versionierte URL verwenden, niemals „latest"-URLs.
Funktioniert SRI auch mit WordPress Page Buildern wie Elementor?
Grundsätzlich ja, aber mit Einschränkungen: Page Builder laden oft viele dynamische Scripts, deren Hashes sich bei Content-Änderungen oder Updates ändern. Für intern generierte Assets ist SRI weniger geeignet. Konzentrieren Sie sich auf fest versionierte externe CDN-Ressourcen (jQuery, Bootstrap, Font Awesome).
Kann ich das SRI Hash Plugin im Produktivbetrieb einsetzen?
Ja, aber mit Sorgfalt. Das Plugin berechnet Hashes beim ersten Laden und cacht sie. Nach Plugin-Updates können zwischengespeicherte Hashes veralten — leeren Sie nach Updates den Plugin-Cache und prüfen Sie die Seite im Browser auf Konsolen-Fehler (Integrity-Fehler erscheinen als „Failed to find a valid digest in the 'integrity' attribute").
Brauche ich crossorigin="anonymous" zwingend bei SRI?
Ja. Ohne crossorigin="anonymous" hat der Browser bei Cross-Origin-Ressourcen keinen Zugriff auf den Dateiinhalt und kann den Hash nicht prüfen — die Ressource wird blockiert. Das CDN muss außerdem CORS-Header (Access-Control-Allow-Origin: *) senden, was alle großen CDNs standardmäßig tun.