二、攻击会话管理
HTTP协议本身是“无状态”,“无连接”的,也就是说HTTP协议本身并不会记住客户端访问的上下文,也无法保存客户端的各种状态,这其中就包括登录状态。如果HTTP不能保存用户的登录状态那就意味着用户在每次访问需要身份验证的网站时都必须填写用户名及密码,这里的“每次访问”是指每个单次的HTTP请求包括刷新一次页面。为了解决上述的问题Web应用程序就需要使用会话这个概念,即用户登录成功后为其建立一个会话,通过会话记录用户的各种状态,通常使用Cookie及Session实现会话机制。
确定会话令牌
- 多个数据共同表示一个会话令牌,包括Cookie,URL参数以及隐藏的表单参数
- 标准的会话Cookie可能存在但是Web应用程序未对其进行使用
- 观察用户登录前后客户端保存数据的变化,这些变化中包含了建立新会话的令牌
- 通过删除客户端向服务器端发送的参数来进行判断,比如在删除了某个参数后无法正常访问用户的个人资料,那么这个参数应该与会话令牌有关
会话代替方案
- HTTP认证:HTTP原生认证机制是通过HTTP头部参数来维持认证状态的,在用户认证成功后的每次请求中,HTTP均会携带用于认证的头部参数。
- 无会话状态机制:一些应用程序不会发布会话令牌来管理用户与应用程序的交互状态,而是在每次请求中传输所有必要的数据(一般保存在Cookie或者隐藏表单字段中),由客户端管理状态,这种机制类似于 ASP.NET | Open-source web framework for .NET ViewState方式。
令牌使用情景
- 发送到用户注册邮箱的密码恢复令牌防止CSRF的会话令牌
- 用于一次性访问受保护资源的令牌
- 未使用验证的购物应用程序的消费者用于检索现有订单状态的令牌
会话令牌生成过程中的缺陷
- 令牌有一定意义
- 令牌可预测
- 加密令牌
会话令牌整个生命周期内的处理
- 在网络上泄露令牌
- 在日志中泄露令牌
- 会话令牌与会话的映射易受到攻击
- 会话终止易受攻击
- 客户端暴露在令牌劫持风险中
- 宽泛的cookie范围
- JWT攻击