在请求参数'_csrf'或标题'X-CSRF-TOKEN'上找到无效的CSRF令牌'null'

 黑天天 发布于 2023-02-02 19:13

配置Spring Security 3.2后,_csrf.token不会绑定请求或会话对象.

这是spring security配置:




    
    
    
    



    
        
            

它呈现下一个HTML:


结果是403 HTTP状态:

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

更新 在一些调试之后,请求对象从DelegatingFilterProxy中获得良好的形式,但是在CoyoteAdapter的第469行中它执行request.recycle(); 删除所有属性......

我使用JDK 1.7在Tomcat 6.0.36,7.0.50中进行测试.

我没有理解这种行为,而不是,如果有人指出我使用与CSRF一起工作的Spring Security 3.2的应用程序样本战争的方向,那么这是可能的.

6 个回答
  • 你不应该加入登录表单吗?

    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> 
    

    正如指出这里的春季安全文档中

    2023-02-02 19:14 回答
  • 试着改变这个:<csrf /> 对此:<csrf disabled="true"/>.它应该禁用csfr.

    2023-02-02 19:15 回答
  • 使用百里香叶,您可以添加:

    <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
    

    2023-02-02 19:15 回答
  • 如果您将应用security ="none",则不会生成csrf令牌.页面不会通过安全筛选器.使用角色ANONYMOUS.

    我没有详细介绍,但它对我有用.

     <http auto-config="true" use-expressions="true">
       <intercept-url pattern="/login.jsp" access="hasRole('ANONYMOUS')" />
       <!-- you configuration -->
       </http>
    

    2023-02-02 19:15 回答
  • 看起来您的Spring应用程序中的CSRF(跨站点请求伪造)保护已启用.实际上它是默认启用的.

    根据spring.io:

    什么时候应该使用CSRF保护?我们的建议是对普通用户可以由浏览器处理的任何请求使用CSRF保护.如果您只创建非浏览器客户端使用的服务,则可能需要禁用CSRF保护.

    所以要禁用它:

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

    如果您希望保持启用CSRF保护,那么您必须在表单中包含csrftoken.你可以这样做:

    <form .... >
      ....other fields here....
      <input type="hidden"  name="${_csrf.parameterName}"   value="${_csrf.token}"/>
    </form>
    

    您甚至可以在表单的操作中包含CSRF令牌:

    <form action="./upload?${_csrf.parameterName}=${_csrf.token}" method="post" enctype="multipart/form-data">
    

    2023-02-02 19:15 回答
  • 用于禁用csrf的Spring文档: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();
       }
    }
    

    2023-02-02 19:15 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有