Subresource Integrity für Astro konfigurieren
Schritt-für-Schritt-Anleitung: SRI-Hashes über Vite-Plugin automatisch generieren oder manuell für externe CDN-Scripts setzen.
Subresource Integrity in Astro
Subresource Integrity (SRI) stellt sicher, dass externe Scripts und Stylesheets nicht manipuliert wurden. Der Browser vergleicht einen kryptografischen Hash mit der geladenen Ressource und blockiert sie bei Abweichung. SRI ist mit 15 von 166 Punkten im Wolf-Agents Web Security Check relevant.
In Astro generiert ein Vite-Plugin automatisch SRI-Hashes für alle bundled Assets. Für externe CDN-Scripts setzen Sie integrity-Attribute manuell. Astros Build-Pipeline basiert auf Vite -- SRI-Plugins integrieren sich nahtlos in den Build-Prozess. Wolf-Agents hostet alle Scripts selbst und setzt SRI für maximale Integritaetssicherung.
SRI schützt speziell gegen Supply-Chain-Angriffe: Wenn ein CDN kompromittiert wird und manipulierte Scripts ausliefert, erkennt der Browser die Abweichung und blockiert die Ausführung. Dieses Szenario tritt in der Praxis auf -- der Polyfill.io-Vorfall 2024 hat gezeigt, wie CDN-Übernahmen Millionen von Websites betreffen können.
Der Browser unterstützt drei Hash-Algorithmen für SRI: sha256, sha384 und sha512. sha384 ist der empfohlene Standard -- er bietet ausreichend Sicherheit bei akzeptabler Hash-Laenge. Sie können mehrere Hashes im integrity-Attribut angeben, um Fallback-Algorithmen zu unterstützen.
SRI-Plugin konfigurieren
Installieren Sie ein Vite-SRI-Plugin und fügen Sie es in astro.config.mjs ein. Das Plugin generiert automatisch integrity-Attribute für alle bundled Scripts und Stylesheets im Build-Output. Verwenden Sie sha384 als Hash-Algorithmus -- er bietet das beste Verhaeltnis aus Sicherheit und Performance.
// astro.config.mjs -- SRI per Vite-Plugin
import { defineConfig } from 'astro/config';
import sri from 'vite-plugin-sri';
export default defineConfig({
vite: {
plugins: [sri()],
},
});Manuelle SRI-Hashes für externe Scripts
Für externe CDN-Scripts, die nicht über die Build-Pipeline laufen, generieren Sie SRI-Hashes manuell und setzen das integrity-Attribut direkt im Template. Verwenden Sie immer versionierte CDN-URLs, damit sich der Hash nicht unerwartet ändert.
<!-- Manuelles SRI für externe Scripts -->
<script
src="https://cdn.example.com/lib@1.2.3/lib.min.js"
integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
crossorigin="anonymous"
></script>
<!-- Externes Stylesheet mit SRI -->
<link
rel="stylesheet"
href="https://cdn.example.com/styles@2.0.0/main.css"
integrity="sha384-H8BRh8jA..."
crossorigin="anonymous"
/># SRI-Hash für eine externe Ressource generieren
curl -s https://cdn.example.com/lib@1.2.3/lib.min.js \
| openssl dgst -sha384 -binary \
| openssl base64 -A
# Oder mit shasum (macOS/Linux)
curl -s https://cdn.example.com/lib@1.2.3/lib.min.js \
| shasum -b -a 384 \
| xxd -r -p \
| base64SRI und CSP kombinieren
SRI und CSP-Nonces ergänzen sich: Die CSP bestimmt, welche Scripts geladen werden dürfen (per Nonce), und SRI stellt sicher, dass geladene Scripts nicht manipuliert sind (per Hash). Ein Script braucht einen gültigen Nonce oder Hash -- nicht beides gleichzeitig.
// src/middleware.ts -- SRI und CSP kombiniert
import { defineMiddleware } from 'astro:middleware';
import crypto from 'node:crypto';
export const onRequest = defineMiddleware(async (context, next) => {
const nonce = crypto.randomUUID();
context.locals.nonce = nonce;
const response = await next();
// CSP erlaubt Scripts per Nonce ODER per Hash
// SRI-Hashes werden zusätzlich im HTML gesetzt
response.headers.set('Content-Security-Policy',
`script-src 'self' 'nonce-${nonce}' 'strict-dynamic'`);
return response;
});SRI verifizieren
Prüfen Sie nach dem Build, ob alle Script- und Link-Tags integrity-Attribute enthalten. Öffnen Sie zusätzlich die Browser DevTools und prüfen Sie die Console auf SRI-Fehler.
# Build erstellen und SRI-Attribute prüfen
npm run build
grep -r "integrity=" dist/ | head -5
# Erwartete Ausgabe:
# dist/index.html: <script src="/_astro/main.abc123.js" integrity="sha384-..." crossorigin="anonymous">
# Wolf-Agents Web Security Check für vollständige Analyse
# https://wolf-agents.com/tools/web-security-check Best Practice: Self-Hosting statt CDN
Die sicherste SRI-Strategie ist Self-Hosting: Laden Sie externe Libraries herunter und bundeln Sie sie über Astros Build-Pipeline. Das Vite-Plugin generiert automatisch SRI-Hashes für alle lokalen Assets. Sie eliminieren die Abhaengigkeit von CDNs und vermeiden Hash-Mismatches bei CDN-Updates.
Wenn Self-Hosting nicht möglich ist, verwenden Sie versionierte CDN-URLs (lib@1.2.3) und dokumentieren Sie alle externen Abhaengigkeiten mit ihren SRI-Hashes. Erstellen Sie ein Script, das SRI-Hashes nach jedem Dependency-Update automatisch aktualisiert. Prüfen Sie regelmäßig, ob CDN-Ressourcen noch mit den gespeicherten Hashes uebereinstimmen.
Wolf-Agents hostet alle Scripts selbst und nutzt Astros Build-Pipeline für automatische SRI-Hashes. Externe Ressourcen werden ausschließlich über versionierte URLs geladen und die Hashes werden im Deployment-Prozess validiert.
Häufige Fehler bei SRI in Astro
crossorigin-Attribut fehlt
SRI erfordert crossorigin="anonymous" bei Cross-Origin-Ressourcen. Ohne dieses Attribut ignoriert der Browser das integrity-Attribut komplett und laedt die Ressource ohne Hash-Prüfung.
CDN-Ressource ändert sich
Wenn ein CDN die Datei aktualisiert, stimmt der Hash nicht mehr. Verwenden Sie versionierte CDN-URLs (z.B. lib@1.2.3) statt lib@latest. Oder hosten Sie kritische Scripts selbst, wie Wolf-Agents es tut.
SRI bei Astro Islands
Astro Islands generieren dynamische Hydration-Scripts. Das Vite-Plugin kann diese automatisch mit SRI-Hashes versehen. Bei manueller SRI-Konfiguration müssen Sie die generierten Script-URLs nach jedem Build aktualisieren.
SSR-Mode und dynamische Scripts
Im SSR-Modus werden Scripts bei jedem Request generiert. Das Vite-Plugin setzt SRI-Hashes nur beim Build. Für dynamische Inline-Scripts verwenden Sie CSP-Nonces statt SRI-Hashes.
Hash-Mismatch nach CDN-Update
Wenn Sie unversionierte CDN-URLs verwenden (z.B. lib@latest), kann der CDN die Datei aktualisieren und der Hash stimmt nicht mehr. Verwenden Sie immer versionierte URLs oder hosten Sie kritische Scripts selbst.
Compliance-Relevanz
SRI schützt vor Supply-Chain-Angriffen über kompromittierte CDNs. PCI DSS 4.0 (Anforderung 6.4.3) fordert explizit die Integritaetsprüfung aller auf Zahlungsseiten geladenen Scripts -- SRI ist die technische Umsetzung dieser Anforderung.
NIS2 verlangt technische Maßnahmen zur Sicherung der Lieferkette. Da CDNs ein Teil der Software-Lieferkette sind, ist SRI eine direkte Umsetzung der NIS2-Anforderungen. Der Wolf-Agents Web Security Check bewertet SRI mit bis zu 15 Punkten und prüft, ob alle eingebetteten Scripts und Stylesheets integrity-Attribute besitzen.
Wie steht Ihre Domain bei Subresource Integrity?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.