相关疑难解决方法(0)

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

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

这是spring security配置:

<http pattern="/login.jsp" security="none"/>

<http>
    <intercept-url pattern="/**" access="ROLE_USER"/>
    <form-login login-page="/login.jsp"
                authentication-failure-url="/login.jsp?error=1"
                default-target-url="/index.jsp"/>
    <logout/>
    <csrf />
</http>

<authentication-manager>
    <authentication-provider>
        <user-service>
            <user name="test" password="test" authorities="ROLE_USER/>
        </user-service>
    </authentication-provider>
</authentication-manager>
Run Code Online (Sandbox Code Playgroud)

login.jsp文件

<form name="f" action="${contextPath}/j_spring_security_check" method="post" >
    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
    <button id="ingresarButton"
            name="submit"
            type="submit"
            class="right"
            style="margin-right: 10px;">Ingresar</button>
    <span>
        <label for="usuario">Usuario :</label>
        <input type="text" name="j_username" id="u" class="" value=''/>
    </span>
    <span>
        <label for="clave">Contrase&ntilde;a :</label>

        <input type="password"
               name="j_password"
               id="p"
               class=""
               onfocus="vc_psfocus = 1;"
               value="">
    </span>
</form>
Run Code Online (Sandbox Code Playgroud)

它呈现下一个HTML:

<input type="hidden" name="" …
Run Code Online (Sandbox Code Playgroud)

spring csrf spring-security csrf-protection

88
推荐指数
7
解决办法
13万
查看次数

如何在POST表单上设置Header字段?

如何在提交表单时在POST标题中设置自定义字段?

html javascript post http-post httprequest

83
推荐指数
3
解决办法
14万
查看次数

Spring Security 3.2 CSRF支持多部分请求

我们已经将Spring Security与我们的应用程序一起使用了几年.上周我们将Spring Security从3.1.4升级到3.2.0.升级很顺利,我们在升级后没有发现任何错误.

在查看Spring Security 3.2.0文档时,我们遇到了围绕CSRF保护和安全头的新增功能.我们按照Spring Security 3.2.0文档中的说明为受保护资源启用CSRF保护.它适用于常规表单,但不适用于我们的应用程序中的多部分表单.在表单提交时,CsrfFilter引发拒绝访问错误,引用请求中缺少CSRF令牌(通过DEBUG日志确定).我们尝试使用Spring Security文档中建议的第一个选项来使CSRF保护与多部分表单一起工作.我们不想使用第二个建议的选项,因为它通过URL泄漏CSRF令牌并带来安全风险.

基于文档的配置的相关部分在Github上作为Gist提供.我们使用的是Spring 4.0.0版.

请注意,我们已尝试以下变体但未成功:

  1. 没有宣布MultipartFilter进入web.xml.
  2. 没有为MultipartFilterin 设置解析器bean名称web.xml.
  3. 使用默认的解析器bean的名字filterMultipartResolverwebContext.xml.

更新:我已经确认即使使用单页示例应用程序,记录的行为也不起作用.任何人都可以确认记录的行为按预期工作吗?是否有可以使用的示例工作应用程序?

spring spring-mvc csrf spring-security

24
推荐指数
2
解决办法
2万
查看次数

当要发送的请求是多部分请求时,Spring CSRF令牌不起作用

我用,

  • Spring Framework 4.0.0 RELEASE(GA)
  • Spring Security 3.2.0 RELEASE(GA)
  • Struts 2.3.16

其中,我使用内置安全令牌来防范CSRF攻击.

Struts表单如下所示.

<s:form namespace="/admin_side"
        action="Category"
        enctype="multipart/form-data"
        method="POST"
        validate="true"
        id="dataForm"
        name="dataForm">

    <s:hidden name="%{#attr._csrf.parameterName}"
              value="%{#attr._csrf.token}"/>
</s:form>
Run Code Online (Sandbox Code Playgroud)

生成的HTML代码如下.

<form id="dataForm"
      name="dataForm"
      action="/TestStruts/admin_side/Category.action"
      method="POST"
      enctype="multipart/form-data">

    <input type="hidden"
           name="_csrf"
           value="3748c228-85c6-4c3f-accf-b17d1efba1c5" 
           id="dataForm__csrf">
</form>
Run Code Online (Sandbox Code Playgroud)

这工作正常,除非请求是多部分,在这种情况下,请求以状态代码403结束.

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

类型状态报告

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

description禁止访问指定的资源.

spring-security.xml文件如下.

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
             xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
           http://www.springframework.org/schema/security
           http://www.springframework.org/schema/security/spring-security-3.2.xsd">

    <http pattern="/Login.jsp*" security="none"></http>

    <http auto-config='true' use-expressions="true" disable-url-rewriting="true" authentication-manager-ref="authenticationManager">
        <session-management session-fixation-protection="newSession">
            <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
        </session-management>

        <csrf/>

        <headers> …
Run Code Online (Sandbox Code Playgroud)

spring struts2 csrf spring-security csrf-protection

8
推荐指数
2
解决办法
2万
查看次数