认证与会话管理
1.认证和授权
认证的目的是为了认出用户是谁。而授权的目的是为了决定用户能够做什么。
当认证出现问题,系统的安全会直接受到威胁。认证的手段是多样的,认证实际上就是一个验证凭证的过程。
单因素认证:只有一个凭证被用于认证。两个因素就是双因素认证。多因素认证的强度高于单因素认证,但是用户体验效果上多因素不占优势。
密码是常见认证手段,密码强度是设计方案认证时一个需要考虑的问题。黑客密码爆破时会用“123456”去尝试所有的用户名。所以尽量使用复杂的密码。OWASP建议重要应用密码应该再8位以上,并且考虑双因素认证,区分大小写。
密码加密算法一般为MD5或者SHA-1。这些算法是不可逆的,但是有些网站提供解密的功能,他们存有原字符串加密后的形式,并进行比较得出原字符串,并不可以逆向解密。所以开发人员进行md5加密时一般增加一段随机字符串来增加破解难度。
2.Session 与认证
一般仅仅用于登录的过程。可以窃取用户的SessionID 来登录用户账户的攻击方式。
3.Session Fixation攻击
会话固定攻击是利用应用系统在服务器的会话ID固定不变机制,借助他人用的相同的会话ID获取认证和授权,然后利用该会话ID劫持他人的会话来进行冒充。
前提是SessionID放在URL中。
流程
1.攻击者自己登录
2.返回一个会话ID给攻击者
3.构造一个链接给被攻击者
4.点击该链接携带攻击者的会话ID和用户名密码正常登录,会话成功建立。
5.攻击者用该会话的ID成功冒充并劫持了受害者的会话。
如何防御
登录重建会话,每次登录后都重置会话。
4. Session 保持攻击
只要用户一直在用网站,Session就不会失效,攻击者可以一直发起请求,让Session一直“活”着。
如何防御?
常见的做法是 在一段时间后,强制销毁Cookie。
当用户端发生变化时,重新建立Session。
5.单点登录(SSO)
只需要登录一次,就可以访问其他相关应用。比如域名不同属于不同源的那么Cookie是不能带到别的域名下的。
实现机制:单独开发一个SSO模块。用户访问app系统,会跳转到CAS server,即SSO登录系统。SSO系统也没有登录弹出登录页面,SSO系统确认后将登录状态写入SSO的Session,浏览器写入到SSO下的Cookie;
有登录弹出登录页面,SSO系统确认后将登录状态写入SSO的Session,浏览器写入到SSO下的Cookie;
SSO生成一个凭证,然后将凭证给app系统,访问app,向SSO验证凭证ST是否有效,验证成功后在域下创建Cookie。