Session与认证

以下内容学习自<<白帽子讲Web安全>>

密码与证书等认证方式,通常用于登录过程,等来完成后,用户访问网站的页面,不可能每次都使用密码认证一次,因此认证成功后,就需要替换一个对用户透明的凭证,这个凭证就是SessionID

当用户登录完成后,在服务端会创建一个新的会话(Session),会话中保存用户的状态和相关信息,服务器维护所有在线用户的Session,此时的认证,只需要知道是哪个用户在浏览当前的页面即可,为了告诉服务器需要使用哪个Session,浏览器需要把当前用户持有的SessionID告知浏览器

最常见的做法就是将SessonID加密后保存到Cookie中,因为Cookie会随着HTTP请求头发送,并受到浏览器同源策略的保护

SessionID一旦在生命周期内被窃取,就等同与账户失窃,Session 劫持就是一种通过窃取用户SessionID 后,使用该SessionID登录进目标账户的攻击方法,此时攻击者实际上使用了目标账户的有效Session,如果SessionID是保存在Cookie中的,则这种攻击可以称为Cookie劫持

Cookie泄露的途径有很多,最常见的是XSS攻击,网络Sniff,以及本地木马窃取,对于XSS漏洞窃取Cookie的攻击,通过给Cookie标记httponly,可以有效缓解XSS窃取Cookie的问题

Session Fixation 攻击

如果用户登录网站过程中,如果登录前后用户的SessionID没有变化,会存在Session Fixation问题

具体的攻击过程:用户X找到一个未经认证的SessionID,然后将这个SessionID交给Y去认证,Y认证完成后,服务器饼没有更新SessionID的值,所以X可以凭借此SessionID登录Y的账户,如果SessionID保存在Cookie中,这个攻击比较难做到,如果是保存在URL 中,则X只需要诱使Y打卡这个URL即可,

解决Session Fixation的正确做法是,登录完成后,重写SessionID

Session保持攻击

一般来说,Session都有生命周期,用户长时间未活动或者点击退出后,服务器将销毁Session,但如果能够攻击者能一直保持一个有效的Session(比如间隔刷新页面,告诉服务器这个用户仍然在活动),而服务器对于活动的Session也一直不销毁的话,攻击者就能通过这个Session一直使用用户的账户,成为一个永久的"后门"

要想使Cookie不过期,还有其他方法,很多应用利用Cookie的Expire标签来控制Session的失效时间,Cookie的失效时间完全由客户端控制,篡改这个时间,并使之永久有效,就有可能获取永久的Session,而服务器完全无法察觉,攻击者甚至可以为Session Cookie增加一个Expire时间,使得原本浏览器关闭就会失效的Cookie持久化的保存在本地,变成一个第三方Cookie

那么如何抵抗这种攻击呢,常见的方法是一定时间后,强制销毁Session,这个时间可以从用户登录时间开始算起,设定一个阀值,比如一天后强制Session过期。但是强制销毁Session可能会影响一些正常的用户,也可以选择当用户的客户端发生变化的时候,要求客户重新登录。还需要考虑一个用户可以同时拥有几个Session,如果一个用户只允许拥有一个Session,攻击者想要保持一个Session也不太可能,当用户再次登录的时候,攻击者所保持的Session将被踢出

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值