会话安全是网站中至关重要的一环,如果没有防范好甚至是灾难性的!会话合法性验证能极大的增强会话安全,保护网站用户安全!

会话概念

一次完整的会话应该是这样的:
用户打开浏览器,输入目标网站域名,此时目标服务器将分配一个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 CanvasCanvas画图区别作为辅助使用
唯一Cookie增强算法强度

通过对以上信息进行特殊处理生成一个唯一性的会话安全ID

当给用户分配SESSION ID时,在服务端记录该SESSION ID的会话安全ID,以后每次请求将再次生成会话安全ID,并和之前会话安全ID的进行比对,如果不一致则使该SESSION ID失效。