是否有可能使用内存中的CSRF令牌简化浏览器JWT安全性?



我正在阅读有关SPA应用程序中的' JWT '安全性的文章,但对它容易受到多种类型的攻击感到困惑,并且不直观地难以掌握和设置。据我所知,用户友好的安全性是关于用户在浏览器重启后保持登录,并且仍然保护不受CSRF攻击。

我读了一些使用localStorage,cookies或内存值的疯狂方法,以及关于在cookie上设置一些标志,如httpOnly和浏览器中的一些标头,同时容易受到XSSCSRF攻击的影响,如果设置不正确。

,我的问题是如果以下安全计划将工作吗?:

  1. 将JWT令牌存储在用户设备的任何位置(localStorage, cookies,等等)(作为公共信息,任何人都可以读取)
  2. 后端将在每个请求
  3. 上返回一个反csrf标头
  4. app每次都会在内存中存储和刷新报头值,并连续发送它以证明是最初登录的用户
  5. 攻击者最终可以获得JWT和/或尝试一些XSS或CSRF,但这将是无用的,因为他不知道反CSRF头值

(注意,对于这种方法,我基本上认为JWT令牌表示身份验证,CSRF标头表示授权。)

你的问题的答案是否定的。

如果我设法在你的网站上做一个XSS,我将有权访问你的javascript可以访问的一切,其中包括CSRF令牌和JWT。你的javascript会运行我的恶意javascript,这意味着我可以访问你所有的东西。

从许多角度来看,JWT令牌作为会话跟踪器是非常糟糕的。早在90年代末网景公司就发明了cookie。它们已经增强了几个安全特性,如HttpOnly标志等,而jwt只是没有。

如果您有服务器到服务器的无状态通信,jwt是很好的,因为您可以包含声明,它可以添加额外的信息,这样服务器就不需要对例如颁发者/userInfo端点进行额外的调用。

服务器到服务器的通信通常也在安全的网络中进行,因此令牌窃取或mitm的风险降低了。

安全很难,比很多人想象的要难得多,没有一个"简单的解决方案"。你需要保护你的网站免受多种不同的攻击,以及这些攻击的组合。

你永远不应该构建自己的定制解决方案,因为总有更聪明的人可以打破定制解决方案。

你应该经常参考OWASP Cheat Sheet系列,它试图收集你在构建现代网页时应该考虑的一切。

最新更新