Spring Security会话 - 管理会话 - 固定 - 保护不起作用

时间:2012-05-17 14:19:10

标签: spring spring-security

我正在使用Spring 3.1 Security。以下是我的“spring-security.xml”

的一部分
<session-management session-fixation-protection="migrateSession">
<concurrency-control max-sessions="1" expired-url="/Login.html"/>
</session-management>

虽然我使用“Chrome浏览器”登录后仍设置session-fixation-protection="migrateSession",然后复制Cookie值并打开“Firefox浏览器”并转到登录页面,然后编辑Cookie并粘贴“Chrome浏览器”中的值,然后我看到我登录了我的应用程序。这意味着“会话固定攻击”是可能的!!!

我的春季安全配置中是否遗漏了什么?

这只是我的以下cofig文件

<http auto-config="false" access-denied-page="/" disable-url-rewriting="true">

<intercept-url pattern="/test01*" access="ROLE_USER" requires-channel="https"/>
<intercept-url pattern="/test02*" access="ROLE_USER" requires-channel="https"/>

<form-login login-page="/Login.html"/>
<logout invalidate-session="true"
        logout-success-url="/"
        logout-url="/logout"/>


<session-management session-fixation-protection="migrateSession">        
    <concurrency-control max-sessions="1" expired-url="/Login.html"/>
</session-management>

</http>

<authentication-manager>
<authentication-provider>
<user-service>    
<user name="a" password="a" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>

2 个答案:

答案 0 :(得分:8)

如果您在之后复制了,那么您已登录(如您所说),那么这不是会话固定攻击(至少不是我们防范的那种)。关键是当您登录时cookie会发生变化,以致其他人无法访问您的帐户。如果你想阻止某人修复已经登录到他们帐户的会话,那么这是另一回事,而且不能以这种方式轻易受到保护。

此外,您不需要设置此属性,因为默认情况下已启用此属性。只需使用一个<session-management>元素。

答案 1 :(得分:1)

这是因为您提供了session-fixation-protection="migrateSession"。那是来自Chrome浏览器的会话被复制到Firefox浏览器的会话中。此外,它是第二次同时登录,不应该。这可能是因为,如果您提供了自己的UserPrincipalUserPrincipalImpl类,则必须覆盖Object的equals()hashCode()方法。尝试使并发控制工作。

另请参阅my question