Subresource Integrity in Spring Boot
SRI-Hashes für Scripts und Stylesheets generieren -- mit Thymeleaf-Integration, automatischer Hash-Generierung und CDN-Absicherung.
Subresource Integrity in Spring Boot
Subresource Integrity (SRI) schuetzt gegen manipulierte externe Ressourcen. Der Browser prüft den Hash einer Datei bevor er sie ausfuehrt -- stimmt der Hash nicht, wird die Ressource blockiert. SRI ist mit 15 von 166 Punkten im Wolf-Agents Web Security Check bewertet.
Spring Boot bietet keine eingebaute SRI-Unterstuetzung. Sie müssen integrity- und crossorigin-Attribute manuell in Thymeleaf-Templates setzen. Für automatische Hash-Generierung integrieren Sie einen Service, der Hashes beim Build oder zur Laufzeit berechnet.
SRI-Hashes generieren
Generieren Sie SHA-384-Hashes für alle externen Scripts und Stylesheets. Verwenden Sie openssl auf der Kommandozeile oder integrieren Sie die Generierung in Ihren Build-Prozess. Der Hash muss bei jeder Datei-Aenderung aktualisiert werden.
# SRI-Hash mit OpenSSL generieren
cat app.js | openssl dgst -sha384 -binary | openssl base64 -A
# Oder mit shasum:
shasum -b -a 384 app.js | awk '{print $1}' | \
xxd -r -p | base64
# Erwartete Ausgabe:
sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wCVerwenden Sie sha384 als Hash-Algorithmus. SHA-256 ist das Minimum, SHA-384 bietet den besten Kompromiss aus Sicherheit und Performance. SHA-512 ist ebenfalls möglich.
Thymeleaf-Templates anpassen
Fuegen Sie integrity- und crossorigin-Attribute zu allen <script>- und <link>-Tags hinzu. Das crossorigin="anonymous"-Attribut ist bei CDN-Ressourcen zwingend erforderlich, damit der Browser den Hash prüfen kann.
<!-- Thymeleaf-Template: SRI-Attribute -->
<script th:src="@{/js/app.js}"
integrity="sha384-oqVuAfXRKap7fdgcCY..."
crossorigin="anonymous"></script>
<!-- CDN-Ressource mit SRI -->
<link rel="stylesheet"
href="https://cdn.example.com/styles.css"
integrity="sha384-abc123..."
crossorigin="anonymous" />
<!-- Dynamische Hashes aus Properties -->
<script th:src="@{/js/vendor.js}"
th:integrity="${@sriProperties.vendorHash}"
crossorigin="anonymous"></script>Build-Integration einrichten
Automatisieren Sie die Hash-Generierung, damit SRI-Hashes nach jedem Build aktuell sind. Erstellen Sie einen @Service, der Hashes zur Laufzeit berechnet, oder verwenden Sie statische Hashes in application.yml. Bei Maven können Sie ein Plugin verwenden, das Hashes während mvn package generiert.
// SriHashService.java -- Hash-Generierung zur Laufzeit
@Service
public class SriHashService {
public String generateHash(String resourcePath)
throws Exception {
Resource resource = new ClassPathResource(
"static/" + resourcePath);
byte[] content = resource
.getInputStream().readAllBytes();
MessageDigest digest = MessageDigest
.getInstance("SHA-384");
byte[] hash = digest.digest(content);
return "sha384-"
+ Base64.getEncoder().encodeToString(hash);
}
}
// application.yml -- Statische Hashes
sri:
hashes:
app-js: "sha384-oqVuAfXRKap7fdgcCY..."
vendor-js: "sha384-xyz789..."SRI-Attribute verifizieren
Prüfen Sie die HTML-Ausgabe Ihrer Anwendung auf korrekte integrity- und crossorigin-Attribute.
# HTML-Ausgabe auf SRI-Attribute pruefen
curl -s http://localhost:8080 | grep -i integrity
# Erwartete Ausgabe:
<script src="/js/app.js" integrity="sha384-oqVuAfXRKap7fdgcCY..." crossorigin="anonymous">Häufige Fehler bei SRI in Spring Boot
Hash-Mismatch nach Rebuild
Wenn sich der Inhalt einer Datei aendert, aendert sich der Hash. Statisch hinterlegte Hashes müssen nach jedem Build aktualisiert werden. Verwenden Sie den SriHashService für automatische Hash-Berechnung.
crossorigin-Attribut fehlt bei CDN-Ressourcen
Ohne crossorigin="anonymous" kann der Browser den Inhalt von Cross-Origin-Ressourcen nicht lesen und den Hash nicht prüfen. Das integrity-Attribut wird dann ignoriert.
Thymeleaf-Fragmente ohne Integrity-Attribute
Thymeleaf-Layouts und -Fragmente können Script-Tags enthalten, die beim Zusammensetzen der Seite keine SRI-Attribute haben. Prüfen Sie alle Fragmente -- nicht nur die Haupttemplates.
Webpack/Vite-Assets mit Content-Hash im Dateinamen
Build-Tools wie Webpack oder Vite generieren Dateinamen mit Content-Hashes (app.a1b2c3.js). Der SRI-Hash muss trotzdem separat berechnet und im Template aktualisiert werden.
Compliance-Relevanz
SRI schuetzt die Integritaet externer Ressourcen und ist für Anwendungen mit CDN-Nutzung besonders wichtig.
Wie steht Ihre Domain bei Subresource Integrity?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.