我想知道该如何戒掉你。 ——《断背山》
Who am I?
- 认证(Authentication):目的是认出用户是谁
- 授权(Authorization):目的是决定用户能做什么
- 认证实际上是一个验证凭证的过程
- 只有一个凭证要认证就是“单因素认证”,有2个或多个凭证要认证就是“双因素认证”或“多凭证认证”,多凭证认证比较安全,但用户体验不好
密码
- 现在的hacker常用的一种暴力破解手段,不是破解密码,而是选择一个弱口令,例如“123456”,然后猜用户名。用户名一般都是公开的,所以hacker可以收集一份用户名字典,使得攻击成本降低
- 密码必须以不可逆的加密算法,或者是单向散列函数算法,加密后存储在数据库
- 将明文密码经过哈希后(比如MD5或者SHA-1)在保存在数据库中,是目前业界比较普遍的做法
- 目前hacker常用的破解MD5后密码的方式是“彩虹表(Rainbow Table)”
- Rainbow Table:收集尽量多的密码和对应的MD5,类似字典一样,通过MD5的值查询密码明文。定期计算一些数据的MD5的值,扩充字典
- Salt:为了避免hacker用彩虹表查到用户的密码明文,在用户注册时,会加上一个Salt(随机的一个字符串)再计算哈希值,然后保存在数据库。验证时,也要把用户输入的密码加上这个Salt,再做哈希计算,然后在验证。这个Salt要保存在服务器的配置文件中,并妥善管理
多因素认证
例如,支付宝采用了密码和数字证书的双重认证,那么成功完成交易的条件就是:
- 密码正确
- 进行支付的电脑必须安装了该用户的数字证书
Session与认证
- Session劫持就是hacker通过截取SessionID(sid),来登录到目标账户的攻击方法
- Session可以保存在Cookie,也可以保存在URL(不安全)
- 如果Session在Cookie中被劫持,可以被称为Cookie劫持。对于XSS窃取Cookie的攻击,可以给Cookie加上httponly
- 但还有其他泄露途径,例如网络被嗅探,或者Cookie文件窃取,都是客户端环境安全,需要从客户端下手
- 一些手机浏览器因为不支持Cookie,只能将SessionID放在url里,hacker可以利用Referer来窃取
- 在生成SessionID时,要保证很强的随机性,例如用足够强的为随机数生成算法
Session Fixation
过程:
- hacker像访问网站,没有完成认证,但拿到了SessionID,例如认证前的url是
http://bbs.xxx.com/wsp/index.php?action=forum&fid=72&sid=2iu2pf
- hacker想办法让用户访问这个url,让用户完成认证
- 然后hacker就可以通过这个sid登录用户的账号
但现在一般把sid放在Cookie中,Session Fixation用武之地会越来越小
Session保持攻击
- Session一般有生命周期,如果用户长时间未活动、或者用户点击退出,Session就会被销毁
- 一般的应用会给Session一个失效时间,到了这个时间会被强制销毁,但也有一些应用为了用户体验,只要用户还“活着”,Session就不会“死”
- 所以hacker可以通过不停发送请求(比如刷新页面等),让这个Session一直活着
Session的另一种保存方式
- 其实,服务器维护每一个用户的Session是很费资源的
- 所以现在有一种做法,就是直接把Session加密保存在Cookie中(这种Cookie是Session Cookie,不是本地Cookie),用户发Cookie过来,服务器再解密。
- 采用这种方式保存Session的应用一般用Cookie的Expire标签来控制Session的失效时间。
- 因为Cookie在浏览器中,所以hacker可以通过XSS漏洞修改Cookie里的值,一方面可以把Session的Expire标签设置成永远,另一方面可以给Session Cookie设置一个Expire标签为永恒,那么这个Cookie就从Session Cookie变成了本地Cookie
对抗Session保持攻击
- 一定时间后强制销毁Session,比如用户登录开始算的3天,但这会影响用户体验
- 另一种方法是,当用户发生变化时,强制重新登录。例如IP、UserAgent等信息变化,强制销毁现在的Session
- 还需要考虑的是,其实每个用户都可以拥有几个有效的Session,如果只有一个Session,用户就不能多设备登录了
单点登录(SSO)
- 用户只需要登录一次就可以访问所有的系统
- 好处:用户体验好,方便。风险集中化,只要保护好这个点就行了,可以做一个相对严密复制一点的验证过程
- 坏处:一旦被突破这一个点,hacker后面的路将一马平川
- OpenID就是一个开放的单点登录系统(在该系统中,URL就是用户的身份标识)
本文作者:
Bano
本文链接: https://bano247.com/2021/11/06/认证与会话管理/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://bano247.com/2021/11/06/认证与会话管理/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!