我正在尝试利用Spring security内置的CSRF保护。这些是我正在使用的弹簧版本:
Spring Framework版本 - 4.2.1
Spring security - 4.0.2
Spring安全文档提到还必须保护登录页面免受CSRF攻击。当我启用CSRF保护(并且没有传递令牌)时,我看到我的登录不起作用 - 正如预期的那样。
我的登录页面是纯HTML页面(不是JSP),我无法使用任何Spring或JSTL标记。我正在考虑实施类似于此处描述的解决方案 -
上面链接中解释的解决方案(作者的博客在评论中链接到接受的答案)是在登录页面上进行AJAX调用,该调用将获取CSRF令牌的值,然后将其包含在登录请求
但是,spring文档还提到一旦访问csrfToken就会创建一个新的HttpSession。我有几个问题 -
我的ajax调用获取csrf令牌不会受到保护,因为我必须在登录前调用它。
一旦访问了CSRF令牌,就会生成新的HttpSession,这也是因为ajax调用不安全而引起关注。
应用程序的其余部分仅进行AJAX或REST调用,并且我计划实现客户端拦截器,以便在用户登录后在头部中包含CSRF令牌。(据我所知,用户会话有一个CsrfToken )
有没有人知道如何使用spring的CSRF保护来保护纯HTML登录页面?
答案 0 :(得分:1)
1)如果你仔细研究CSRF vulnerability,你会发现通过GET请求获取令牌没有漏洞。
2)登录/注销等后,当创建新会话时,令牌将会更改,您可能需要再次获取它。它在this帖子中进行了更多讨论。
Spring Lemon的源代码将是如何使用AJAX + CSRF的一个很好的参考。另请参阅此official guide。