如何防止令牌替换攻击?
How to prevent token substitution attack?
假设我们有两个用户在进行以下操作 -
- 用户 1 向身份验证服务器请求访问令牌并也被授予。
- 现在用户 1 将令牌保存到 localstorage/cookie 以供将来 api 访问。
- 现在 User2 接近 User1 浏览器并获得 access_token 一些方法。
- 现在用户 2 使用用户 1 的 access_token 调用 api 并且无需登录也可以访问。
现在我们可以验证令牌了吗?
你无法避免这种情况的发生。但是,令牌应该有一个过期时间,因此攻击者只能在该时间段内访问。此外,如果您知道令牌已被盗,您可以将其撤销,使其不再有效。
您可以应用更多安全措施,例如将令牌与特定 IP 地址相关联,或者一些甚至使用机器学习来检测异常行为的高级服务。
OAuth 令牌等机密信息除非经过加密,否则绝不能存储在 HTTP Cookie 中。加密应该是客户端/会话特定的,这意味着每个客户端会话应该使用不同的加密密钥。如果入侵者要提取加密的 cookie 并尝试将其用于不同的会话,则解密将失败,从而使 cookie 无效。
在您的场景中,用户 B 获得了对用户 A 会话的访问权限。没有太多可用的保护。这类似于您登录银行,离开办公桌去喝咖啡,然后其他人坐下来开始使用您登录的同一浏览器 window 转账。
安全性最弱link。每个组件都必须实现强大的安全性。如果可以破坏单个组件,那么其他安全组件也可能会失败。
需要在非常严密的安全性和便利性之间进行权衡。如果过程太乏味或太困难,或者只是简单地阻碍,人类往往会牺牲安全。
我的银行做了一些有趣的事情。一旦我登录并继续做一些事情(点击 links、移动鼠标等),我就会保持身份验证。如果我暂停一分钟,那么下次我单击 link 时,我必须重新进行身份验证。有趣的策略来检测可能离开办公桌无人看管的人。
假设我们有两个用户在进行以下操作 -
- 用户 1 向身份验证服务器请求访问令牌并也被授予。
- 现在用户 1 将令牌保存到 localstorage/cookie 以供将来 api 访问。
- 现在 User2 接近 User1 浏览器并获得 access_token 一些方法。
- 现在用户 2 使用用户 1 的 access_token 调用 api 并且无需登录也可以访问。
现在我们可以验证令牌了吗?
你无法避免这种情况的发生。但是,令牌应该有一个过期时间,因此攻击者只能在该时间段内访问。此外,如果您知道令牌已被盗,您可以将其撤销,使其不再有效。
您可以应用更多安全措施,例如将令牌与特定 IP 地址相关联,或者一些甚至使用机器学习来检测异常行为的高级服务。
OAuth 令牌等机密信息除非经过加密,否则绝不能存储在 HTTP Cookie 中。加密应该是客户端/会话特定的,这意味着每个客户端会话应该使用不同的加密密钥。如果入侵者要提取加密的 cookie 并尝试将其用于不同的会话,则解密将失败,从而使 cookie 无效。
在您的场景中,用户 B 获得了对用户 A 会话的访问权限。没有太多可用的保护。这类似于您登录银行,离开办公桌去喝咖啡,然后其他人坐下来开始使用您登录的同一浏览器 window 转账。
安全性最弱link。每个组件都必须实现强大的安全性。如果可以破坏单个组件,那么其他安全组件也可能会失败。
需要在非常严密的安全性和便利性之间进行权衡。如果过程太乏味或太困难,或者只是简单地阻碍,人类往往会牺牲安全。
我的银行做了一些有趣的事情。一旦我登录并继续做一些事情(点击 links、移动鼠标等),我就会保持身份验证。如果我暂停一分钟,那么下次我单击 link 时,我必须重新进行身份验证。有趣的策略来检测可能离开办公桌无人看管的人。