Invalid CSRF Token ‘null’ a été trouvé sur le paramètre de requête ‘_csrf’ ou en-tête ‘X-CSRF-TOKEN’

Après avoir configuré Spring Security 3.2, _csrf.token n’est pas lié à une requête ou à un object de session.

Ceci est la configuration de sécurité du spring:

               

Le fichier login.jsp

 

Et il rend le prochain code HTML:

  

Le résultat est le statut HTTP 403:

 Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'. 

MISE À JOUR Après un certain débogage, l’object de la demande obtient un bon formulaire DelegatingFilterProxy, mais dans la ligne 469 de CoyoteAdapter, il exécute request.recycle (); qui efface tous les atsortingbuts …

Je teste dans Tomcat 6.0.36, 7.0.50 avec JDK 1.7.

Je n’ai pas compris ce comportement, plutôt que, il serait possible si quelqu’un me dirige dans le sens d’une guerre d’échantillons d’applications avec Spring Security 3.2 qui fonctionne avec CSRF.

Il semble que la protection CSRF (Cross Site Request Forgery) de votre application Spring soit activée. En fait, il est activé par défaut.

Selon spring.io :

Quand devriez-vous utiliser la protection CSRF? Nous vous recommandons d’utiliser la protection CSRF pour toute demande pouvant être traitée par un navigateur par des utilisateurs normaux. Si vous créez uniquement un service utilisé par des clients autres que des navigateurs, vous souhaiterez probablement désactiver la protection CSRF.

Donc, pour le désactiver:

 @Configuration public class RestSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable(); } } 

Si vous souhaitez conserver la protection CSRF activée, vous devez inclure dans votre formulaire le csrftoken . Vous pouvez le faire comme ceci:

 
....other fields here....

Vous pouvez même inclure le jeton CSRF dans l’action du formulaire:

 

Ne devriez-vous pas append au formulaire de connexion?

  

Comme indiqué dans la documentation de sécurité de Spring

Si vous appliquez security = “none”, aucun jeton csrf ne sera généré. la page ne passera pas par le filtre de sécurité. Utilisez le rôle ANONYME.

Je ne suis pas allé dans les détails, mais ça marche pour moi.

      

Essayez de changer ceci: à ceci: . Il devrait désactiver csfr.

Documentation de spring pour désactiver csrf: https://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html#csrf-configure

 @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable(); } } 

Avec thymeleaf, vous pouvez append:

  

J’ai déjà eu le même problème.

Votre configuration utilise security = “none” et ne peut donc pas générer _csrf:

  

vous pouvez définir access = “IS_AUTHENTICATED_ANONYMOUSLY” pour la page /login.jsp remplacer ci-dessus config:

        

je pense que csrf ne fonctionne qu’avec des formulaires de spring

 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 

changer pour form:form balise et voyez-la qui fonctionne.

S’il vous plaît voir mon exemple d’application de travail sur Github et comparer avec votre configuration.

Dans votre contrôleur, ajoutez ce qui suit:

 @RequestParam(value = "_csrf", required = false) Ssortingng csrf 

Et sur la page jsp append

 
		      	

Aucune des solutions n’a fonctionné pour moi. Le seul qui a fonctionné pour moi au spring est:

action = “./ upload? $ {_ csrf.parameterName} = $ {_ csrf.token}”

REMPLACÉ PAR:

action = “./ upload? _csrf = $ {_ csrf.token}”

(Spring 5 avec csrf activé dans la configuration Java)

J’ai utilisé la version 4.2.3 de Spring pour la sécurité du spring, mais j’ai eu la même erreur. Ensuite, j’ai rétrogradé à 3.1.4 et cela fonctionne parfaitement.

Voici mes dépendances de pom.xml:

  org.springframework spring-core 3.2.3.RELEASE   org.springframework spring-beans 3.2.3.RELEASE   org.springframework spring-context 3.2.3.RELEASE   org.springframework spring-jdbc 3.2.3.RELEASE   org.springframework spring-web 3.2.3.RELEASE   org.springframework spring-webmvc 3.2.3.RELEASE   javax.servlet jstl 1.2   mysql mysql-connector-java 5.1.26   javax.validation validation-api 1.1.0.Final   org.hibernate hibernate 3.5.4-Final pom   org.hibernate hibernate-validator 5.0.1.Final   commons-validator commons-validator 1.4.0   org.springframework.security spring-security-core 3.1.4.RELEASE   org.springframework.security spring-security-web 3.1.4.RELEASE   org.springframework.security spring-security-config 3.1.4.RELEASE