Uri*_*iel 5 jwt single-page-application auth0
Auth0 提供了大量资源列表,描述了身份验证的最佳实践。其中有一连串建议不要localStorage用作存储 (JWT) 令牌的手段。
我发现这些点有几个问题:
auth0.getTokenSilently()他们的 SDK 来获取令牌,但据我所知,攻击者没有任何理由不能自己调用这个方法(即注入另一个 sdk 脚本,使用现有的客户端密钥,并且只是调用getToken 从那里),从而以几乎相同的方式获取令牌,就好像它存储在localStorage所以我完全同意 OWASP 的建议,不要将敏感数据localStorage存储在 . 但这只是因为这些东西会允许攻击者扩大攻击范围(访问银行帐户,尝试在其他应用程序中重复使用用户的密码等)。但我很难看出 accessTokens 是如何受此影响的。
虽然我对 Auth0 实现、功能和设计决策了解不多,但从我对 OAuth2 和安全性的一般理解来看,我可以尝试将这些点联系起来。
\n单个建议本身并不能提供足够的安全性或所需的功能,但是当与其他相关建议组合使用时,我们可以实现所需的安全性和行为级别。
\n让我们回顾一下您提出的观点。
\n\n\n从我的角度来看,访问令牌本身并不会扩大攻击范围。如果攻击者可以控制受害者的浏览器,他们可以使用令牌从受影响的浏览器本身执行调用
\n
问题localstorage是:
localStorage并且sessionStorage不跨子域共享。这是 SSO 功能的显示阻止程序(有一些解决方案使用iframe,但这些看起来更像是解决方法,而不是一个好的解决方案。当使用响应标头 X-Frame-Options 来避免使用 进行点击劫持攻击时iframe,任何使用 的解决方案都不iframe可用问题)
XSS 可以将访问和/或刷新令牌发送到攻击者控制的远程服务器,从而允许攻击者冒充用户
\n注意:第 2 点中提到的漏洞可以通过使用发送者受限访问令牌方法来缓解,其中客户端必须证明他们确实拥有该令牌。另一种选择是OWASP 中提到的指纹方法,它需要 cookie。然而,Auth0 似乎没有实现这些。因此,避免的建议localstorage是有道理的。
\n\nAuth0 建议使用其 SDK 中的 auth0.getTokenSilently() 来获取令牌,但据我所知,攻击者应该没有任何理由无法自己调用此方法
\n
正确的。这就是为什么
\ngetTokenSilently()方法要求您Allow Skipping User Consent在仪表板的 API 设置中启用。虽然我没有看到这方面的具体指南,但我认为如果您将令牌存储在 cookie 中,则不需要启用此选项,从而消除了滥用该方法的任何可能性。\n\n我知道 XSS 无法访问令牌的唯一方法基本上是使用 httpOnly cookie,但这会自行创建新向量 (CSRF),并且仍然无法阻止攻击者从受影响的内部调用 api浏览器
\n
真的。但您可以通过以下一种或多种方法的组合来缓解这种情况:
\nSameSitecookie。请参阅此处的文档。如果浏览器不支持SameSitecookie,请按照下面的另一种方法Strict-Transport-Security: max-age=<expire-time>; includeSubDomains\xe2\x80\x8b为仅允许安全连接,以防止任何中间人覆盖来自子域的 CSRF cookie| 归档时间: |
|
| 查看次数: |
1045 次 |
| 最近记录: |