4

默认情况下,当用户提交登录表单并通过身份验证时,他会被重定向到他希望访问的最后一个 URL,在他注销之前(从请求缓存中获取)或根 URL。此外,如果spring-security-redirect在表单提交请求中找到“ ”参数,我们将被重定向到该参数的值。

我希望使用这个功能,但是在这个线程中,Luke Taylor提到这将是一个安全风险,我们应该为此使用一个额外的表单字段,然后自定义我们的 LoginSuccessHandler 来检索和使用我们希望的表单字段.

我无法理解他提到的安全风险,以及我们不应该使用 Spring Security 已经提供的功能,而不是使用我们自己的自定义逻辑的原因。我想要使​​用该功能的原因与上述线程中的 OP 相同。

4

1 回答 1

3

背后的攻击是某种跨站点请求伪造(CSRF-Attack)

如果攻击者 (A) 将修改后的链接发送给某人 (B) 并且 B 快速查看此链接并看到它是您的应用程序,他可能会单击此链接。

B 人输入他的凭据并登录。

但现在重定向已执行,使用该人 B 的凭据!

所以想象你有一个应用程序,每个用户都可以通过调用http://yourApp/spendSomeMoney=100来花一些钱 ——(该应用程序的第一个错误是这是一个 GET 而不是一个 POST

现在想象(A)发送(B)这个链接: http://yourApp/login.jsp?spring-security-redirect=http://yourApp/spendSomeMoney=100

你看到了问题。

一般来说,我强烈建议使用一些 CSRF 保护过滤器,无论我是否使用该重定向。

于 2012-04-12T18:52:17.973 回答