spring security - 为什么不在登录表单中使用'spring-security-redirect'参数重定向到特定页面

时间:2012-04-12 15:44:11

标签: spring security spring-security spring-3

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

我希望使用此功能,但在this主题中, Luke Taylor 提到它存在安全风险,我们应该为此目的使用其他表单字段,并且然后自定义我们的LoginSuccessHandler来检索和使用该表单字段。

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

1 个答案:

答案 0 :(得分:3)

攻击behinde是某种Cross-Site Request Forgery(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保护过滤器,无论您是否使用该重定向。