第9章 认证与会话管理
1、Who am I?
认证的目的是为了认出用户是谁,而授权的目的是为了决定用户能够做些什么。
认证实际上就是一个验证凭证的过程。
2、密码的那些事
密码必须以不可逆的加密算法,或者是单向散列函数算法,加密后存储在数据库中。
目前业界普遍密码加密方法是:将明文经过哈希后(比如MD5或者SHA-1)在保存到数据库。
目前黑客们广泛使用的一种破解MD5后密码的方法是“彩虹表”。彩虹表的思路是收集尽可能多的密码明文和明文对应的MD5值。只需要查询MD5值,就能找到该MD5值对应的明文。
"为了避免哈希值泄露后,黑客可以直接通过彩虹表查询出密码明文,在计算密码明文的哈希值时,增加一个“Salt"。"Salt"是一个字符串,作用是增加明文的复杂度。
MD5(Username+Password+Salt),其中Salt=swdibwi.....(随机字符)
3、多因素认证
多因素认证提高了攻击门槛。比如支付宝密码与证书的双因素认证。
4、Session与认证
当认证完成,用户登录进网站以后,需要替换一个对用户透明的凭证,就是SessionID。
保存Session id的几种方式:
- 可以将SesssID加密后保存在Cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。
- 由于Cookie可以被人为的禁止,必须有其它的机制以便在Cookie被禁止时仍然能够把Session id传递回服务器,经常采用的一种技术叫做URL重写,就是把Session id附加在URL路径的后面,附加的方式也有两种,一种是作为URL路径的附加信息,另一种是作为查询字符串附加在URL后面。网络在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个Session id。
- 另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把Session id传递回服务器。
5、Session Fixation 攻击
没有换“锁”,而导致安全问题,就是Session Fixation问题。
解决方法:在登录完成后,重写SessionID。
6、Session 保持攻击
在一定的时间后,强制注销Session。
7、单点登录(SSO)
Single Sign On,它希望用户只需要登录一次,就可以访问所有的系统。对于单点登录下的缺陷,在单点处设计安全方案,如加“双因素”验证。
8、总结
在Web应用中,用户登录之后,服务器端通常会建立一个新的Session 以追踪用户的状态,每个Session对应一个标识符SessionID,SessionID用来标识用户身份,一般是加密保存在Cookie中。有的网站也会将Session保存在Cookie中,以减轻服务器端维护Session的压力。