[JAVA] En-tête de réponse de mémo d'utilisation de Spring Security

Histoire de base et systématique Histoire de certification / d'autorisation Histoire Remember-Me Histoire CSRF Histoire de gestion de session Histoire de la sécurité de la méthode Histoire CORS L'histoire de Run-As L'histoire d'ACL Test story Parlez de la coopération avec MVC et Boot

Édition supplémentaire Ce que Spring Security peut et ne peut pas faire

En-tête défini par défaut

Lors de l'utilisation de Spring Security, les en-têtes suivants sont ajoutés par défaut à la réponse.

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

En-tête sur le cache

Cache-Control, Pragma, ʻExpires` sont tous configurés pour empêcher le navigateur de se mettre en cache.

Si les pages qui ne peuvent pas être affichées sans se connecter sont mises en cache, les utilisateurs malveillants peuvent être en mesure de voir les informations à protéger en examinant le cache laissé localement même après la déconnexion.

Par conséquent, il est configuré pour ne pas autoriser la mise en cache de cette manière.

X-Content-Type-Options: nosniff Certains navigateurs Web essaient de déterminer le type de fichier en examinant le contenu du fichier au lieu de «Content-Type». Cela semble s'appeler Content Sniffing.

Lorsque cette option est activée, il existe un risque que le navigateur exécute accidentellement du code malveillant [^ 1] contenu dans le fichier.

[^ 1]: un fichier image avec du code JavaScript intégré qui établit XSS

Si cet en-tête (X-Content-Type-Options: nosniff) est défini dans la réponse, le navigateur ne déterminera pas automatiquement le type de fichier (IE prend en charge 8 et plus).

Strict-Transport-Security Cet en-tête est défini par défaut uniquement pour la communication HTTPS.

Supposons que vous accédiez à un site en omettant le protocole et en entrant uniquement le nom d'hôte dans le champ URL de votre navigateur, tel que «xxx.com / xxxx». Normalement, le protocole à cette URL est complété par HTTP et la requête est exécutée.

Certains sites peuvent vous rediriger pour basculer vers la communication HTTPS lorsqu'une requête HTTP arrive.

Cependant, comme la première communication se fait par HTTP, [Attaque intermédiaire](http://www.weblio.jp/content/%E4%B8%AD%E9%96%93%E8%80%85] Il existe un risque de recevoir% E6% 94% BB% E6% 92% 83).

Avec l'en-tête Strict-Transport-Security, le navigateur reconnaîtra que" l'hôte doit communiquer via HTTPS ". Ensuite, même si vous omettez le protocole et entrez l'URL, il communiquera automatiquement via HTTPS.

Cependant, puisque cet en-tête est un en-tête de réponse, il doit communiquer sur HTTPS au moins une fois. Bien sûr, si vous accédez pour la première fois via HTTP, la communication est vulnérable. (Il semble que cela s'appelle TOFU (Trust On First Use))

Les paramètres peuvent être spécifiés dans cet en-tête, pour les espaces de noms et la configuration Java:

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>

--Ajoutez une balise <headers> sous <http>, et ajoutez une balise <hsts> en dessous pour la contrôler. --hsts = HTTP Strict Transport Security --max-age-seconds est max-age, --ʻInclude-subdomains définit ʻincludeSubDomains respectivement.

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);
    }
    
    ...
}

X-Frame-Options Si vous autorisez l'intégration de votre site Web avec `