[JAVA] Antwortheader für die Verwendung von Spring Security

Grundlegende und systematische Geschichte Zertifizierungs- / Autorisierungsgeschichte Remember-Me-Geschichte CSRF-Geschichte Session Management Story Method Security Story CORS-Geschichte Die Geschichte von Run-As ACL-Geschichte Teststory Sprechen Sie über die Zusammenarbeit mit MVC und Boot

Sonderedition Was Spring Security kann und was nicht

Standardmäßig festgelegte Kopfzeile

Bei Verwendung von Spring Security werden der Antwort standardmäßig die folgenden Header hinzugefügt.

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

Header über Cache

Cache-Control , Pragma und Expires sind alle so eingestellt, dass der Browser nicht zwischengespeichert werden kann.

Wenn Seiten zwischengespeichert werden, die ohne Anmeldung nicht angezeigt werden können, können böswillige Benutzer möglicherweise Informationen sehen, die geschützt werden sollen, indem sie den lokal verbleibenden Cache auch nach dem Abmelden anzeigen.

Daher ist festgelegt, dass das Caching auf diese Weise nicht zulässig ist.

X-Content-Type-Options: nosniff Einige Webbrowser versuchen, den Dateityp zu bestimmen, indem sie den Inhalt der Datei anstelle von "Inhaltstyp" betrachten. Dies scheint als Content Sniffing bezeichnet zu werden.

Wenn dies aktiviert ist, besteht die Gefahr, dass der Browser versehentlich den in der Datei enthaltenen Schadcode [^ 1] ausführt.

[^ 1]: Eine Bilddatei mit eingebettetem JavaScript-Code, die XSS erstellt

Wenn dieser Header (X-Content-Type-Options: nosniff) in der Antwort gesetzt ist, ermittelt der Browser den Dateityp nicht automatisch (IE unterstützt 8 und höher).

Strict-Transport-Security Dieser Header wird standardmäßig nur für die HTTPS-Kommunikation festgelegt.

Angenommen, Sie greifen auf eine Site zu, indem Sie das Protokoll weglassen und nur den Hostnamen in das URL-Feld Ihres Browsers eingeben, z. B. "xxx.com / xxxx". Normalerweise wird das Protokoll unter dieser URL durch HTTP ergänzt und die Anforderung ausgeführt.

Einige Websites leiten Sie möglicherweise weiter, um zur HTTPS-Kommunikation zu wechseln, wenn eine HTTP-Anforderung eingeht.

Da die erste Kommunikation jedoch über HTTP erfolgt, wird Zwischenangriff Es besteht das Risiko,% E6% 94% BB% E6% 92% zu erhalten 83).

Mit dem Header "Strict-Transport-Security" erkennt der Browser, dass "der Host über HTTPS kommunizieren muss". Selbst wenn Sie das Protokoll weglassen und die URL eingeben, wird automatisch über HTTPS kommuniziert.

Da dieser Header jedoch ein Antwortheader ist, muss er mindestens einmal über HTTPS kommunizieren. Wenn Sie zum ersten Mal über HTTP zugreifen, ist die Kommunikation natürlich anfällig. (Es scheint, dass dies [TOFU (Trust On First Use)] genannt wird (https://en.wikipedia.org/wiki/Trust_on_first_use))

In diesem Header können Parameter für Namespaces und Java-Konfiguration angegeben werden:

namespace

applicationContext.xml


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:sec="http://www.springframework.org/schema/security"
       ...>
    
    ...
    
    <sec:http>
        ...
        <sec:headers>
            <sec:hsts max-age-seconds="60"
                      include-subdomains="false" />
        </sec:headers>
    </sec:http>
    
    ...
</beans>

Java Configuration

python


package sample.spring.security;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

import java.util.Collections;

@EnableWebSecurity
@ComponentScan
public class MySpringSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                ...
                .headers()
                    .httpStrictTransportSecurity()
                    .maxAgeInSeconds(60)
                    .includeSubDomains(false);
    }
    
    ...
}

--Sie können mit ".headers (). HttpStrictTransportSecurity ()" "Strict-Transport-Security" einstellen.

X-Frame-Options Wenn Sie zulassen, dass Ihre Website mit