Spring 3.1 MVC,Spring Security 3.1 - CSRF令牌

and*_*dev 17 spring spring-mvc spring-security

目前我正在寻找在Spring MVC和Spring Security表单中包含CRSF令牌的可能性.什么是最简单的解决方案,涵盖(Spring Security + Spring MVC)servlet并允许呈现和评估CSRF令牌?

我很惊讶这种基本机制在Springs堆栈中不可用.(我认为每个Web应用程序框架都是基本的)

PS:我看过HDIV但是找不到与Spring Security一起使用它的解决方案.(例如,登录表单由Spring MVC呈现,登录请求由Spring Security处理)

Eya*_*upu 23

Spring 3.1引入了一个名为RequestDataValueProcessor的新接口.使用此接口,您可以轻松(并自动 - 无需对JSP或控制器进行任何更改!)将CSRF令牌注册到HTTP表单.你可以在这里看到一个详细的例子,它也引用了github上的示例代码(所以你可以从那里拿它并在你的应用程序中使用它).


Ral*_*lph 8

更新(2014年1月):Spring Security 3.2包含CSRF令牌实现.


对于Spring Security <= 3.1:

因为CSRF与Spring Secruity(身份验证和授权)有关,所以它们可以彼此分开实现.

有一些基于过滤器的CRSF实现.例如,Tomcat 7和Tomcat 6.0.something附带了一个

当我尝试使用它们(2011年夏天)时,我感觉不是很好.所以我实现了自己的.

编辑(2012年4月):我的实现适用于Spring 3.0,如果你使用的是Spring 3.1,那么看看Eyal Lupu的答案和他的博客它使用了一些Spring 3.1功能,因此过滤器处理更容易.

到目前为止我还没有公开(没时间).但是你将.你可以下载它(这是我第一次使用4shared.com,我希望它有效):

我的实现的缺点是,您需要将提示显式添加到提交POST,DELETE,PUT的每个表单.

JSP(X):

xmlns:crsf="http://www.humanfork.de/tags/de/humanfork/security/crsf"
...
<form ...>
   <crsf:hiddenCrsfNonce/>
   ....
</form>
Run Code Online (Sandbox Code Playgroud)

web.xml中

<filter>
    <filter-name>IdempotentCrsfPreventionFilter</filter-name>
    <filter-class>de.humanfork.security.crsf.IdempotentCsrfPreventionFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>IdempotentCrsfPreventionFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在Spring 3.1中,我们添加了一个名为RequestDataValueProcessor的接口.您可以在应用程序上下文中实现它并对其进行配置,以便使用JSP Spring表单标记更新每个表单.我们这样做是为了让HDIV库易于与Spring MVC集成,但当然任何人都可以使用它. (2认同)

Chr*_*ler 7

使用Spring Security 3.2.0.RC1提供了CSRF保护功能.还有一个包含AJAX请求的解决方案.

http://www.springsource.org/node/22675http://spring.io/blog/2013/08/21/spring-security-3-2-0-rc1-highlights-csrf-protection/