会话安全是网站中至关重要的一环,如果没有防范好甚至是灾难性的!会话合法性验证能极大的增强会话安全,保护网站用户安全!
会话概念
一次完整的会话应该是这样的: 用户打开浏览器,输入目标网站域名,此时目标服务器将分配一个SESSION ID给此用户,在用户浏览器内会写一个COOKIE来记录此SESSION ID。当用户登陆目标网站后,服务端将标识这个SESSION ID为登陆用户。也就是说服务器完全是通过SESSION ID来识别用户的。
会话安全
此时如果有恶意着通过网站缺陷找到XSS漏洞,就可以构造JS脚本盗取用户的SESSION ID,从而获取其权限!
为了避免这种情况出现,减少XSS的危害,使用HttpOnly可以有效防止JS读取Cookie,这样XSS就无法盗取SESSION了。
会话合法性验证
可是这样也不安全,用户可能装了某个插件或者流量被劫持,此时恶意用户也能够拿到该用户的SESSION ID,所以要对会话信息进行合法性验证。
目标:当SESSION ID被恶意用户盗取后,通过程序识别使其无法登陆!
要做到这一点,我们需要找到每一个用户唯一标识。通过分析我们可以发现以下信息:
标识 | 说明 |
---|---|
User-Agent | 浏览器Agent是标识浏览器唯一性 |
IP | 用户IP也具有相对的唯一性 |
分辨率 | 屏幕分辨率作为辅助性质使用 |
系统版本 | 系统版本作为辅助性质使用 |
插件 | 插件作为辅助性质使用 |
HTML5 Canvas | Canvas画图区别作为辅助使用 |
唯一Cookie | 增强算法强度 |
通过对以上信息进行特殊处理生成一个唯一性的会话安全ID
当给用户分配SESSION ID时,在服务端记录该SESSION ID的会话安全ID,以后每次请求将再次生成会话安全ID,并和之前会话安全ID的进行比对,如果不一致则使该SESSION ID失效。