默认情况下,当用户提交登录表单并进行身份验证时,他会在注销之前(从请求缓存获取)或重定向到他希望访问的最后一个URL根URL。此外,如果找到带有表单提交请求的“spring-security-redirect
”参数,我们会被重定向到该参数的值。
我希望使用此功能,但在this主题中, Luke Taylor 提到它存在安全风险,我们应该为此目的使用其他表单字段,并且然后自定义我们的LoginSuccessHandler来检索和使用该表单字段。
我无法理解他提到的安全风险,以及我们不应该使用Spring Security已经提供的功能而不是使用我们自己的自定义逻辑的原因。我想要使用该功能的原因与上述线程中的OP相同。
答案 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保护过滤器,无论您是否使用该重定向。