并发登录安全
无限制的登录可能会掩盖严重的业务逻辑缺陷。
用户在笔记本电脑上登录。几秒钟后,同一个账号在不同的浏览器上登录。接着是移动设备。然后是一个 API 客户端。一切运行完美。
这看起来没问题,因为许多应用都支持多设备。但你必须问:是否每个应用都应该允许无限数量的会话?
在某些系统中,多会话是一项功能。而在其他系统中,它是攻击者用来隐藏踪迹的缺陷。这是一种业务逻辑漏洞。代码按照设计运行,但设计本身很脆弱。
区别在于: • 传统漏洞利用的是编码错误。 • 业务逻辑漏洞利用的是设计决策。
想想流媒体服务。如果一个订阅允许十个人同时观看,登录系统是正常的,但业务规则失效了。
这也适用于银行、管理面板和 SaaS 产品。
如何进行测试:
- 通过浏览器 A 登录并保持活跃状态。
- 在浏览器 B 中打开无痕窗口。
- 使用相同的凭据登录。
- 检查第一个会话是否仍然有效。
- 检查是否可以在两个会话中执行敏感操作。
高安全性应用通常执行以下规则:
- 每个账号仅限一个活跃会话。
- 当发生新登录时,注销旧会话。
- 管理设备的控制功能。
- 新登录提醒。
如果攻击者窃取了凭据,而你允许无限会话,他们就可以永远保持登录状态。他们和真实用户同时保持活跃,双方都不会察觉到入侵者。
上下文决定一切。 需要多会话的应用:
- 即时通讯应用。
- 社交媒体。
- 电子邮件服务。
需要严格控制的应用:
- 银行系统。
- 管理仪表板。
- 医疗保健平台。
如何修复:
- 在数据库中存储活跃的会话 ID。
- 当发生新登录时,终止旧会话。
- 让用户可以看到活跃的设备和位置。
- 添加“从所有设备退出登录”按钮。
- 为新登录发送电子邮件或短信提醒。
不要只寻找像 SQL injection 这样的代码漏洞。要寻找应用行为与业务需求之间的差距。
今天就审查您的会话策略。您最大的风险可能不是代码损坏,而是逻辑缺陷。