gpt4 book ai didi

authentication - 使用无状态(=无 session )身份验证时需要 CSRF token 吗?

转载 作者:行者123 更新时间:2023-12-03 04:39:27 25 4
gpt4 key购买 nike

当应用程序依赖无状态身份验证(使用 HMAC 等)时,是否有必要使用 CSRF 保护?

示例:

  • 我们有一个单页应用程序(否则我们必须在每个链接上附加 token : <a href="...?token=xyz">...</a>

  • 用户使用 POST /auth 对自己进行身份验证。身份验证成功后,服务器将返回一些 token 。

  • token 将通过 JavaScript 存储在单页应用程序内的某个变量中。

  • 此 token 将用于访问受限制的 URL,例如 /admin .

  • token 将始终在 HTTP header 内传输。

  • 没有 Http session ,也没有 Cookie。

据我了解,应该(?!)不可能使用跨站点攻击,因为浏览器不会存储 token ,因此它无法自动将其发送到服务器(这就是当使用 Cookie/ session )。

我错过了什么吗?

最佳答案

我发现了一些关于 CSRF + 使用 no cookie 进行身份验证的信息:

  1. https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/
    “由于您不依赖 cookie,因此无需防范跨站点请求”

  2. http://angular-tips.com/blog/2014/05/json-web-tokens-introduction/
    “如果我们采用 cookie 方式,您确实需要执行 CSRF 以避免跨站点请求。正如您将看到的那样,在使用 JWT 时我们可能会忘记这一点。”
    (JWT = Json Web Token,无状态应用程序基于 token 的身份验证)

  3. http://www.jamesward.com/2013/05/13/securing-single-page-apps-and-rest-services
    “在不冒 CSRF 漏洞风险的情况下进行身份验证的最简单方法就是避免使用 cookie 来识别用户”

  4. http://sitr.us/2011/08/26/cookies-are-bad-for-you.html
    “CSRF 的最大问题是 cookie 绝对无法防御此类攻击。如果您使用 cookie 身份验证,您还必须采取额外措施来防范 CSRF。您可以采取的最基本的预防措施是确保您的应用程序从不执行任何副作用来响应 GET 请求。”

还有很多页面表明,如果您不使用 cookie 进行身份验证,则不需要任何 CSRF 保护。当然,您仍然可以将 Cookie 用于其他用途,但避免在其中存储诸如 session_id 之类的内容。

<小时/>

如果您需要记住用户,有两种选择:

  1. localStorage:浏览器内的键值存储。即使用户关闭浏览器窗口,存储的数据也将可用。其他网站无法访问该数据,因为每个网站都有自己的存储空间。

  2. sessionStorage:也是浏览器内的数据存储。区别在于:当用户关闭浏览器窗口时数据将被删除。但如果您的网络应用程序由多个页面组成,它仍然很有用。因此您可以执行以下操作:

  • 用户登录,然后您将 token 存储在 sessionStorage
  • 用户单击一个链接,该链接会加载一个新页面(= 一个真实链接,并且没有 JavaScript 内容替换)
  • 您仍然可以从 sessionStorage 访问 token
  • 要注销,您可以手动从 sessionStorage 中删除 token ,或者等待用户关闭浏览器窗口,这将清除所有存储的数据。

(两者都请看这里:http://www.w3schools.com/html/html5_webstorage.asp)

<小时/>

token 身份验证有官方标准吗?

JWT(Json Web Token):我认为它仍然是一个草案,但它已经被很多人使用,并且这个概念看起来简单且安全。 (IETF:https://datatracker.ietf.org/doc/html/draft-ietf-oauth-json-web-token-25)
还有许多可用框架的库。只要谷歌一下就可以了!

关于authentication - 使用无状态(=无 session )身份验证时需要 CSRF token 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21357182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com