JAVA年度安全 第一周 防御Session Fixation

http://www.jtmelton.com/2012/01/02/year-of-security-for-java-week-1-session-fixation-prevention


这是神马东西,我为啥要关心?

Session Fixation,常用的定义:session劫持的一个变种。最常见的基本流程是:
1、攻击者从应用中获取一个可用的session id
2、攻击者强迫受骗者使用这个session id

3、攻击者通过受骗者正在使用的session id获取受骗者账户的访问权限。


第2步诱使受骗者使用这个session id才是攻击的精髓。常见的做法仅仅是给受骗者发送一个带有某个网站session id的url链接。 www.2cto.com
很明显,一个用户能够控制其他用户的账户是一个严重的问题,那么。。。
我应该做什么?
幸运的是解决这个问题通常很简单。简单的建议:
当用户成功登陆后,废弃用户的session(译者注:网站在用户登陆后,废弃用户登录前使用的session)
解决Session Fixation的常见流程如下:
1、用户输入正确的凭证
2、系统成功认证用户信息
3、当前session中的所有需要被保留的信息都存放到一个临时位置
4、废弃当前session(HttpSession.invalidate())
5、创建新的session(new session ID)
6、将临时位置中的信息放入新session中
7、用户使用新的session id成功登陆访问页面


在ESAPI工程中有一段有用的代码来展示如何改变session标示。

http://code.google.com/p/owasp-esapi-java/source/browse/trunk/src/main/java/org/owasp/esapi/reference/DefaultHTTPUtilities.java(参考changeSessionIdentifier方法)


还可以采用其他的方法来提供更多的保障来避免这种情况。下面列出我的一些想法:

1、检查用户是否试图使用一个废弃的session id登陆(需要维护一个LRU cache来保存废弃的session id列表)
2、检查用户是否试图使用一个已经在其他ip上使用过的session id(需要使用map来维护这些数据)
3、如果发现一些明显的恶意行为,考虑使用类似AppSensor(作者的广告)的工具来保护你的应用,并且能够让你知道这些攻击。


正如你所知,session fixation是一个严重问题,但是有很简单的解决方案。如果可能的话,你最好的措施是引入一些“企业级”框架中(例如ESAPI)的合适解决方案,这样就能够在你的所有应用中通用这个方案。

参考
———–
https://www.owasp.org/index.php/Session_fixation
http://www.acros.si/papers/session_fixation.pdf
http://cwe.mitre.org/data/definitions/384.html

http://projects.webappsec.org/w/page/13246960/Session%20Fixation

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值