Session fixation attack(会话固定攻击)是利用服务器的session不变机制,借他人之手获得认证和授权,然后冒充他人。
1.Mallory先打开一个网站http://unsafe,然后服务器会回复他一个session id。比如SID=mjg4qid0wioq。Mallory把这个id记下了。
2.Mallory给Alice发送一个电子邮件,他假装是银行在宣传自己的新业务,例如,我行推出了一项新服务,率先体验请点击:http://unsafe/?SID=mjg4qid0wioq,SID后面是Mallory自己的session id。
3.Alice被吸引了,点击了 http://unsafe/?SID=mjg4qid0wioq,像往常一样,输入了自己的帐号和口令从而登录到银行网站。
4.因为服务器的session id不改变,现在Mallory点击 http://unsafe/?SID=mjg4qid0wioq 后,他就拥有了Alice的身份。可以为所欲为了。
所以以后看到发来的地址带有一串id的比如
SID=mjg4qid0wioq
jsessionid=mjg4qid0wioq
的,就要长个心眼了,以防是别有用心之人盗取你的账号。
解决方案,可以是在用户登录成功后重新创建一个session id,而不是用原来的那个id。在spring security中,默认就带了这个方案,有session-fixation-protection。
如果想搞个不安全的服务自己玩玩,可以修改session-fixation-protection为"none"
如此你就可以重现文章一开始提到的场景了。
1.Mallory先打开一个网站http://unsafe,然后服务器会回复他一个session id。比如SID=mjg4qid0wioq。Mallory把这个id记下了。
2.Mallory给Alice发送一个电子邮件,他假装是银行在宣传自己的新业务,例如,我行推出了一项新服务,率先体验请点击:http://unsafe/?SID=mjg4qid0wioq,SID后面是Mallory自己的session id。
3.Alice被吸引了,点击了 http://unsafe/?SID=mjg4qid0wioq,像往常一样,输入了自己的帐号和口令从而登录到银行网站。
4.因为服务器的session id不改变,现在Mallory点击 http://unsafe/?SID=mjg4qid0wioq 后,他就拥有了Alice的身份。可以为所欲为了。
所以以后看到发来的地址带有一串id的比如
SID=mjg4qid0wioq
jsessionid=mjg4qid0wioq
的,就要长个心眼了,以防是别有用心之人盗取你的账号。
解决方案,可以是在用户登录成功后重新创建一个session id,而不是用原来的那个id。在spring security中,默认就带了这个方案,有session-fixation-protection。
如果想搞个不安全的服务自己玩玩,可以修改session-fixation-protection为"none"
<http auto-config='true' session-fixation-protection="none">
<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
<intercept-url pattern="/**" access="ROLE_USER" />
</http>
如此你就可以重现文章一开始提到的场景了。