1

我正在使用 Spring 3.1 安全性。以下是我的“spring-security.xml”的一部分

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

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

我错过了春季安全配置中的任何内容吗?

这只是我的以下配置文件

<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>
4

2 回答 2

8

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

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

于 2012-05-17T14:37:21.947 回答
1

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

另请参阅我的问题

于 2012-05-17T14:36:10.020 回答