Skip to main content

10 Best Practices für Spring-Boot-Sicherheit

Artikel von

Matt Raible

Spring Boot Security Best Practices small

16. August 2018

0 Min. Lesezeit

Sie arbeiten mit Spring Boot und wissen nicht, wo Sie beim Thema Sicherheit anfangen sollen? Keine Sorge! Dieses Cheat Sheet stellt Best Practices vor, mit denen Entwickler und Maintainer die Sicherheit ihrer Spring-Boot-Anwendungen verbessern können.

Spring Boot ist eines der meistgenutzten Frameworks im Java-Ökosystem, denn es vereinfacht die Entwicklung von Spring-Anwendungen erheblich. Deshalb sollten Sie die Sicherheitslage Ihrer Spring-Boot-Anwendungen insgesamt verbessern. Dabei unterstützen wir Sie gerne.

Dieser Beitrag basiert auf einem ausführlicheren Blogartikel, den ich gemeinsam mit Matt Raible, Java Champion und Developer Advocate bei Okta, verfasst habe. Wir arbeiten beide in der Sicherheitsbranche, lieben Java und möchten Entwickler dabei unterstützen, sicherere Anwendungen zu erstellen. Was wäre also besser geeignet als ein übersichtliches Cheat Sheet zur Spring-Boot-Sicherheit?

Kommen wir ohne Umschweife zu unserer Liste mit Best Practices für die Spring-Boot-Sicherheit. Den ausführlicheren Originalbeitrag finden Sie im Okta-Blog.

Was bedeutet Spring-Boot-Sicherheit?

Spring-Boot-Sicherheit kann Unterschiedliches bedeuten. Im Allgemeinen geht es darum, das Spring-Security-Framework in Ihre Spring-Boot-Webanwendung einzubinden, indem Sie die Spring-Boot-Security-Starter-Abhängigkeit hinzufügen. Spring Security ist ein Framework für Authentifizierung und Zugriffskontrolle, das sich problemlos in eine Spring-Boot-Anwendung integrieren lässt. Spring-Boot-Sicherheit umfasst jedoch mehr als nur das Einbinden des Spring-Security-Frameworks. Dieses Cheat Sheet widmet sich dem umfassenderen Thema Spring-Boot-Sicherheit und zeigt, wie Sie Ihre mit Spring Boot erstellte Anwendung schützen können.

Best Practices für Spring-Boot-Sicherheit

Die folgende sorgfältig zusammengestellte Liste geht über die Einführung von Spring Security für Authentifizierung und Autorisierung in Ihrer Spring-Boot-Anwendung hinaus. Sie befasst sich mit der umfassenderen Sicherheitsstrategie für Spring Boot und behandelt folgende Themen:

  1. HTTPS in der Produktionsumgebung verwenden

  2. Abhängigkeiten testen und Schwachstellen in Spring Boot finden

  3. CSRF-Schutz aktivieren

  4. Eine Content-Security-Policy zum Schutz vor XSS in Spring Boot verwenden

  5. OpenID Connect zur Authentifizierung verwenden

  6. Passwort-Hashing verwenden

  7. Aktuelle Releases verwenden

  8. Secrets sicher speichern

  9. Ihre Anwendung einem Penetrationstest unterziehen

  10. Ihr Sicherheitsteam eine Codeüberprüfung durchführen lassen

1. HTTPS in der Produktionsumgebung verwenden

TLS/SSL-Zertifikate waren früher teuer und HTTPS galt als langsam. Die Rechner sind inzwischen viel leistungsfähiger und haben damit das Performance-Problem gelöst. Außerdem stellt Let’s Encrypt kostenlose TLS-Zertifikate bereit. Diese Entwicklungen haben vieles verändert und dafür gesorgt, dass TLS zum Standard wurde.

Um HTTPS in Ihrer Spring-Boot-Anwendung zu erzwingen, können Sie WebSecurityConfigurerAdapter erweitern und eine sichere Verbindung voraussetzen.

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

 @Override
 protected void configure(HttpSecurity http) throws Exception {
   http.requiresChannel().requiresSecure();
 }
}

Cloud-Anbieter können die Verwaltung von TLS-Zertifikaten erheblich vereinfachen. Amazon Certificate Manager funktioniert ähnlich wie Let’s Encrypt, ist jedoch standardmäßig in alle AWS-Produkte und -Dienste integriert. Damit können Sie völlig kostenlos SSL-Zertifikate bereitstellen lassen. Die automatische Verlängerung und weitere Aufgaben werden ohne Aufwand oder Konfiguration übernommen. Heroku bietet ebenfalls Automated Certificate Management.

2. Abhängigkeiten testen und Schwachstellen in Spring Boot finden

Wahrscheinlich wissen Sie nicht genau, wie viele direkten Abhängigkeiten Ihre Anwendung verwendet. Und vermutlich ist Ihnen auch die Zahl der transitiven Abhängigkeiten nicht bekannt. Das ist häufig der Fall, obwohl Abhängigkeiten den Großteil Ihrer Anwendung ausmachen und Schwachstellen in Spring Boot enthalten können. Angreifer nehmen Open-Source-Abhängigkeiten zunehmend ins Visier, denn durch ihre Wiederverwendung können sie viele Opfer erreichen. Daher sollten Sie sicherstellen, dass der gesamte Abhängigkeitsbaum Ihrer Anwendung keine bekannten Schwachstellen enthält.

Snyk testet die Build-Artefakte Ihrer Anwendung und kennzeichnet Abhängigkeiten mit bekannten Schwachstellen in Spring Boot. In einem Dashboard erhalten Sie eine Liste der Schwachstellen in den Paketen, die Ihre Anwendung verwendet.

Snyk-Dashboard mit allen anfälligen Projekten und der Anzahl hoher, mittlerer und niedriger Sicherheitslücken für drei GitHub-Maven-Projekte.

Außerdem schlägt Snyk Upgrade-Versionen vor oder stellt Patches zur Behebung Ihrer Sicherheitsprobleme bereit – per Pull Request an Ihr Quellcode-Repository. Snyk schützt auch Ihre Umgebung: Künftige Pull Requests in Ihrem Repository werden automatisch per Webhook getestet, damit sie keine neuen bekannten Schwachstellen in Spring Boot einführen.

Snyk ist sowohl über eine Weboberfläche als auch über eine CLI verfügbar. So können Sie das Tool problemlos in Ihre CI-Umgebung integrieren und den Build abbrechen lassen, wenn Schwachstellen den von Ihnen festgelegten Schweregrad überschreiten.

Starten Sie mit Capture the Flag

Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Herausforderungen lösen.

3. CSRF-Schutz aktivieren

Cross-Site Request Forgery ist ein Angriff, bei dem ein Nutzer dazu gebracht wird, unerwünschte Aktionen in einer Anwendung auszuführen, bei der er gerade angemeldet ist.

Spring Security bietet eine hervorragende CSRF-Unterstützung, die standardmäßig aktiviert ist. Wenn Sie das Tag <form:form> von Spring MVC oder Thymeleaf zusammen mit @EnableWebSecurity verwenden, wird das CSRF-Token automatisch als ausgeblendetes Eingabefeld hinzugefügt. Um dies in Ihre Spring-Boot-Sicherheitsstrategie aufzunehmen, müssen Sie Spring Security als Starter-Abhängigkeit hinzufügen.

Wenn Sie ein JavaScript-Framework wie Angular oder React verwenden, müssen Sie CookieCsrfTokenRepository konfigurieren, damit JavaScript das Cookie lesen kann.

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
       http
           .csrf()
               .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
   }
}

Spring Security fügt dem Cookie XSRF-TOKEN automatisch das Flag secure hinzu, wenn die Anfrage über HTTPS erfolgt. Für CSRF-Cookies verwendet Spring Security nicht das Flag SameSite=strict. Bei der Sitzungsverwaltung mit Spring Session oder WebFlux kommt es jedoch zum Einsatz.

4. Eine Content-Security-Policy zum Schutz vor XSS in Spring Boot verwenden

Content Security Policy (CSP) ist eine zusätzliche Sicherheitsebene, die dazu beiträgt, XSS-Angriffe (Cross-Site Scripting) und Dateneinschleusungsangriffe einzudämmen. Aktivieren Sie CSP, indem Sie Ihre Anwendung so konfigurieren, dass sie einen Content-Security-Policy-Header zurückgibt. Alternativ können Sie in Ihrer HTML-Seite ein <meta http-equiv="Content-Security-Policy">-Tag verwenden.

Spring Security stellt standardmäßig mehrere Sicherheits-Header bereit. Eine CSP fügt Spring Security nicht standardmäßig hinzu. Mit der folgenden Konfiguration können Sie den CSP-Header in Ihrer Spring-Boot-Anwendung aktivieren.

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
       http.headers()
           .contentSecurityPolicy("script-src 'self' https://trustedscripts.example.com; object-src https://trustedplugins.example.com; report-uri /csp-report-endpoint/");
   }
}

5. OpenID Connect zur Authentifizierung verwenden

OpenID Connect (OIDC) ist eine Erweiterung von OAuth 2.0, die Informationen über Nutzer bereitstellt. Zusätzlich zu einem Zugriffstoken wird ein ID-Token hinzugefügt. Außerdem gibt es einen /userinfo-Endpunkt, über den Sie weitere Informationen abrufen können. OIDC bietet auch eine Endpunkterkennung und eine dynamische Clientregistrierung.

Das folgende Diagramm zeigt, wie OIDC für die Authentifizierung funktioniert.

Diagramm des OIDC-Autorisierungscode-Flows mit Client, Autorisierungsserver, Nutzereinwilligung, Callback und Tokenaustausch.

6. Passwort-Hashing verwenden

Passwörter im Klartext zu speichern, gehört zu den schlimmsten Dingen, die Sie für die Sicherheit Ihrer Anwendung tun können. Zum Glück erlaubt Spring Security standardmäßig keine Klartextpasswörter. Darüber hinaus enthält es ein Krypto-Modul, das Sie für symmetrische Verschlüsselung, die Schlüsselgenerierung und Passwort-Hashing (auch Passwortkodierung genannt) verwenden können.

PasswordEncoder ist die zentrale Schnittstelle für Passwort-Hashing in Spring Security und sieht folgendermaßen aus:

public interface PasswordEncoder {
   String encode(String rawPassword);
   boolean matches(String rawPassword, String encodedPassword);
}

Spring Security bietet mehrere Implementierungen. Am häufigsten werden BCryptPasswordEncoder und Pbkdf2PasswordEncoder verwendet.

7. Aktuelle Releases verwenden

Es gibt verschiedene Gründe, die Abhängigkeiten Ihrer Anwendung regelmäßig zu aktualisieren. Die Sicherheit ist einer der wichtigsten Gründe für ein Upgrade. Die Starter-Seite start.spring.io verwendet nach Möglichkeit die neuesten Versionen von Spring-Paketen und Abhängigkeiten.

Infrastruktur-Upgrades sind oft weniger störend als Upgrades von Abhängigkeiten, da Bibliotheksautoren unterschiedlich viel Wert auf Abwärtskompatibilität und Änderungen des Verhaltens zwischen Releases legen. Wenn Sie in Ihrer Konfiguration eine Sicherheitslücke entdecken, haben Sie drei Möglichkeiten: aktualisieren, patchen oder ignorieren. Ein Upgrade ist für den Gesamtzustand Ihrer Anwendung am sichersten, aber nicht immer möglich. In diesem Fall können Patches Schwachstellen in Ihrem Paket beheben. Diese erhalten Sie oft von Sicherheitsspezialisten wie Snyk. Eine Schwachstelle zu ignorieren, ist natürlich ebenfalls eine Option – allerdings keine gute. Vielleicht ist Ihnen eine Schwachstelle bekannt, Sie halten sie aber nicht für direkt ausnutzbar. Bedenken Sie, dass sie im aktuellen Anwendungsablauf vielleicht keine Rolle spielt, ein Entwickler später jedoch zusätzlichen Code hinzufügen könnte, der einen verwundbaren Pfad nutzt.

8. Secrets sicher speichern

Zu Ihrer Spring-Boot-Sicherheitsstrategie gehört auch der Schutz Ihrer Daten. Sensible Informationen wie Passwörter und Zugriffstoken müssen sorgfältig behandelt werden. Sie dürfen nicht ungeschützt herumliegen, im Klartext übertragen oder leicht vorhersehbar in Ihrem lokalen Speicher abgelegt werden. Wie die GitHub-Historie immer wieder gezeigt hat, machen sich Entwickler oft nicht genug Gedanken darüber, wie sie ihre Secrets speichern.

Bewährt hat sich die Speicherung von Secrets in einem Vault. Dort können Sie Anmeldedaten für Dienste speichern, bereitstellen und sogar generieren, die Ihre Anwendung möglicherweise nutzt. Mit Vault by HashiCorp lassen sich Secrets einfach speichern. Außerdem bietet Vault eine Reihe weiterer Dienste. Sie können auch gängige Authentifizierungsmechanismen wie LDAP integrieren, um Token abzurufen.

Wenn Sie das interessiert, sollten Sie sich etwas Zeit nehmen, um Spring Vault kennenzulernen. Es bietet eine Abstraktionsschicht über HashiCorp Vault und ermöglicht Clients den Zugriff über Spring-Annotationen. So können sie Secrets abrufen, speichern und widerrufen, ohne sich mit der Infrastruktur auseinandersetzen zu müssen. Das folgende Codebeispiel zeigt, wie einfach sich mit einer Annotation ein Passwort aus Spring Vault auslesen lässt.

@Value("${password}")
String password;

9. Ihre Anwendung einem Penetrationstest unterziehen

Das Sicherheitstool OWASP ZAP ist ein Proxy, der zur Laufzeit Penetrationstests für Ihre Live-Anwendung durchführt. Das beliebte kostenlose Open-Source-Projekt (mit über 4.000 Sternen) wird auf GitHub gehostet.

OWASP ZAP findet Schwachstellen unter anderem mit den Tools Spider und Active Scan. Spider beginnt mit einer Ausgangsliste von URLs, ruft diese auf und analysiert jede Antwort. Dabei erkennt das Tool Hyperlinks und fügt sie einer Liste hinzu. Anschließend ruft es die neu gefundenen URLs auf und wiederholt den Vorgang rekursiv. So erstellt es eine Karte der URLs Ihrer Webanwendung. Active Scan testet Ihre ausgewählten Ziele automatisch anhand einer Liste potenzieller Schwachstellen. Sie erhalten einen Bericht mit Details dazu, an welchen Stellen Ihre Webanwendung ausgenutzt werden kann.

10. Ihr Sicherheitsteam eine Codeüberprüfung durchführen lassen

Codeüberprüfungen sind für jedes leistungsstarke Softwareentwicklungsteam unverzichtbar. Bei Okta müssen sämtlicher Produktionscode und alle offiziellen Open-Source-Projekte von unserem Expertenteam für Sicherheit analysiert werden. Vielleicht gibt es in Ihrem Unternehmen keine Sicherheitsexperten. Wenn Sie jedoch mit sensiblen Daten arbeiten, sollten Sie das ändern!

Laden Sie das Spring-Boot-Security-Cheat-Sheet herunter und hängen Sie es gut sichtbar auf. So erinnert es Sie an die Best Practices, die Sie als Entwickler bei der Verwendung von Spring Boot in Ihren Anwendungen befolgen sollten.

FAQ

Wie füge ich Spring Boot Sicherheit hinzu?

Spring Security hinzufügen beginnt damit, dass Sie Ihrer Spring-Boot-Anwendung die Security-Starter-Abhängigkeit hinzufügen.

Wie deaktiviere ich Spring Security in Spring Boot?

Standardmäßig ist Spring Security aktiviert, sobald Sie das Paket spring-boot-starter-security einbinden. Sie können es ganz einfach deaktivieren, indem Sie SecurityAutoConfiguration in der Datei application.properties ausschließen.

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration

Starten Sie mit Capture the Flag

Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Herausforderungen lösen.

Weiterlesen

Blog

Frontier-Modelle fanden die Schwachstellen. Nur der Angreifer fand die Angriffsketten.

Die statische Analyse fand die Schwachstellen, doch erst Live-Angriffstests bewiesen, wie sie sich zu Angriffen verketten lassen. Ein Vergleich von Evo COS, Claude Security und Claude Code Security.

feature insights context
Blog

Autonome Angriffe sind bereits Realität. Die Verteidigung muss Schritt halten.

Autonome Angreifer verkürzen das Zeitfenster für die Verteidigung. Erfahren Sie, wie kontinuierliches Erkennen, Beheben, Validieren und Verhindern Sicherheitsteams helfen kann, Schritt zu halten.

Blog

Warum KI-Coding-Agenten immer wieder fehlerhafte Zugriffskontrollen schreiben

KI-Coding-Agenten können Autorisierungslogik erzeugen, die kompiliert und die Prüfung besteht, dabei aber die Daten eines Mandanten für einen anderen offenlegt. Erfahren Sie, warum fehlerhafte Zugriffskontrollen schwer zu erkennen sind und wie Sie sie verhindern.