我正在使用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>
答案 0 :(得分:8)
如果您在之后复制了,那么您已登录(如您所说),那么这不是会话固定攻击(至少不是我们防范的那种)。关键是当您登录时cookie会发生变化,以致其他人无法访问您的帐户。如果你想阻止某人修复已经登录到他们帐户的会话,那么这是另一回事,而且不能以这种方式轻易受到保护。
此外,您不需要设置此属性,因为默认情况下已启用此属性。只需使用一个<session-management>
元素。
答案 1 :(得分:1)
这是因为您提供了session-fixation-protection="migrateSession"
。那是来自Chrome浏览器的会话被复制到Firefox浏览器的会话中。此外,它是第二次同时登录,不应该。这可能是因为,如果您提供了自己的UserPrincipal
和UserPrincipalImpl
类,则必须覆盖Object的equals()
和hashCode()
方法。尝试使并发控制工作。
另请参阅my question。