不幸的是,与真正的请求相反,没有有效的方法来明确地标识出源自攻击者的请求。因为大多数反措施检查的属性(例如IP地址或用户代理特征)要么都不可靠(IP地址可能在多个请求中更改),要么很容易伪造(例如
User-Agent 请求标头),因此可能会产生不必要的误报(即真正的用户切换IP地址)或否定否定(即攻击者能够使用相同的 User-Agent
成功伪造请求)。
这就是为什么防止会话劫持的最佳方法是确保攻击者无法找到其他用户的会话ID。这意味着您应该设计您的应用程序及其会话管理,以使(1)攻击者无法通过使用足够的熵来猜测有效的会话ID,以及(2)攻击者没有其他方法可以通过已知的攻击获得有效的会话ID。
/漏洞,例如嗅探网络通信,跨站点脚本,通过 Referer 泄漏等。
也就是说,您应该:
- 使用足够的随机输入来生成会话ID(请参阅 session.entropy_file , session.entropy_length 和 session.hash_function )
- 在传输过程中使用HTTPS保护会话ID
- 将会话ID存储在cookie中而不是URL中,以避免通过 Referer 泄漏(请参阅 session.use_only_cookies )
- 使用
HttpOnly
和Secure
属性设置cookie,以禁止通过Javascript访问(如果存在XSS漏洞),并禁止通过不安全的通道进行传输(请参见 session.cookie_httponly 和 session.cookie_secure )
除此之外,您还应该在某些会话状态更改(例如,登录后确认真实性或更改授权/特权)后使旧的ID(请参见
session_regenerate_id函数)无效的同时重新生成会话ID,此外,您还可以定期执行此 *** 作以减少时间跨度成功进行会话劫持攻击。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)