【问题标题】:Spring 3.1 MVC, Spring Security 3.1 - CSRF tokenSpring 3.1 MVC,Spring Security 3.1 - CSRF 令牌
【发布时间】:2012-03-06 14:44:41
【问题描述】:

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

我很惊讶 Springs 堆栈中没有这种基本机制。 (我认为这是每个 Web 应用程序框架的基础)

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

【问题讨论】:

  • 你说得对,Spring 没有这种支持。但问题是什么?
  • 好的。一个问号不见了。对不起。是否有一个涵盖 Spring Security + Spring MVC 和 CSRF 保护的库?还是仅仅覆盖 Spring MVC 就足够了,因为 CSRF 仅在用户经过身份验证时才有害?

标签: spring spring-mvc spring-security


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    更新(2014 年 1 月):Spring Security 3.2 包含 CSRF-Token 实现。


    对于 Spring Security

    因为 CSRF 与 Spring Secruity(身份验证和授权)无关,所以两者都可以彼此分开实现。

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

    当我尝试使用它们时(2011 年夏天),我不觉得它运作良好。 所以我实现了自己的。

    编辑(2012 年 4 月):我的实现适用于 Spring 3.0,如果您使用的是 Spring 3.1,请查看 Eyal Lupu's answer 和他的 Blog 它使用了一些 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>
    

    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>
    

    【讨论】:

    • 请注意,在 Spring 3.1 中,我们添加了一个名为 RequestDataValueProcessor 的接口。您可以实现它并在应用程序上下文中对其进行配置,以便在假设使用 JSP Spring 表单标记的情况下更新每个表单。我们这样做是为了让 HDIV 库更容易与 Spring MVC 集成,当然任何人都可以使用它。
    【解决方案3】:

    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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      • 2012-12-04
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      • 2015-08-25
      • 2014-12-06
      相关资源
      最近更新 更多