为仅HTML *登录页面弹出CSRF保护

时间:2015-10-16 21:21:35

标签: javascript html spring spring-mvc spring-security

我正在尝试利用Spring security内置的CSRF保护。这些是我正在使用的弹簧版本:

Spring Framework版本 - 4.2.1

Spring security - 4.0.2

Spring安全文档提到还必须保护登录页面免受CSRF攻击。当我启用CSRF保护(并且没有传递令牌)时,我看到我的登录不起作用 - 正如预期的那样。

我的登录页面是纯HTML页面(不是JSP),我无法使用任何Spring或JSTL标记。我正在考虑实施类似于此处描述的解决方案 -

With Spring Security 3.2.0.RELEASE, how can I get the CSRF token in a page that is purely HTML with no tag libs

上面链接中解释的解决方案(作者的博客在评论中链接到接受的答案)是在登录页面上进行AJAX调用,该调用将获取CSRF令牌的值,然后将其包含在登录请求

但是,spring文档还提到一旦访问csrfToken就会创建一个新的HttpSession。我有几个问题 -

  1. 我的ajax调用获取csrf令牌不会受到保护,因为我必须在登录前调用它。

  2. 一旦访问了CSRF令牌,就会生成新的HttpSession,这也是因为ajax调用不安全而引起关注。

  3. 应用程序的其余部分仅进行AJAX或REST调用,并且我计划实现客户端拦截器,以便在用户登录后在头部中包含CSRF令牌。(据我所知,用户会话有一个CsrfToken )

    有没有人知道如何使用spring的CSRF保护来保护纯HTML登录页面?

1 个答案:

答案 0 :(得分:1)

1)如果你仔细研究CSRF vulnerability,你会发现通过GET请求获取令牌没有漏洞。

2)登录/注销等后,当创建新会话时,令牌将会更改,您可能需要再次获取它。它在this帖子中进行了更多讨论。

Spring Lemon的源代码将是如何使用AJAX + CSRF的一个很好的参考。另请参阅此official guide