2016-12-16 60 views
0

这是情景:预期CSRF令牌没有发现春季安全

我使用Spring Security的4.0.1,已默认启用CSRF,和一切工作确定,直到昨天。

昨天我添加了Spring Security Tags,登录(和其他表单工作正常),但是一个特殊的表单停止工作。

这种形式的多,因为上传两个文件,这种形式有CSRF参数,但服务器返回:

HTTP状态403 - 预期CSRF令牌没有找到。您的会话 是否已过期?

这是基本形式:

<form id="documentForm" class="card-panel" method="POST" enctype="multipart/form-data" action="<c:url value="/documents/signDocument?${_csrf.parameterName}=${_csrf.token}"/>"> 
    <input type="file" name="document"/> 
    <input type="text" name="signer"/> 
</form> 

当然,这是形式的完全切断的版本,但是请注意CSRF参数正在通过行动网址发送。是的,我试着将CSRF参数放在隐藏的输入中,结果相同。

在一个侧面说明,这种形式可以为匿名用户访问

+0

为了避免将令牌放入URL中,可以将标记添加到HTML标头的元标记中,然后将其添加到XHR请求标头中,就像我在这里描述的那样http://stackoverflow.com/questions/21514074/弹簧CSRF令牌此结果不功时最请求待发送-是-A-多部分热曲/ 43122490#43122490 –

回答

0

你所面临的例外

org.springframework.security.web.csrf.CsrfFilter#doFilterInternal 

将抛出一个断点,你可以看到在预期的CSRF令牌当前会话,以及从头部或请求参数收到的令牌。

如果没有找到正确的会话或会话cookie错误,也可能会发生此错误,因此您可能还需要检查该错误。