【发布时间】:2017-01-03 02:50:09
【问题描述】:
我刚刚了解了 JWT 进行身份验证。将 JWT 令牌存储在 localStorage/sessionStorage 中会暴露给 XSS。将其存储在 cookie 中容易受到 CSRF 的攻击。我一直在研究这个并且我想到了这个解决方案,但我不确定它有多安全以及我是否应该在生产中使用它。
解决方案是从服务器获取 JWT 令牌,将其存储在 cookie 中。生成一个 CSRF 令牌(将存储在 JWT 中),该令牌将与每个 HTML 页面一起发送,或者在隐藏的 HTML 字段中,或者作为全局 JS 变量 ()。该 CSRF 令牌将与使用 JS/AJAX 的每个请求一起发送。这样我们就可以先排除 CSRF,再验证 JWT 令牌。
我不确定是否应该在每个加载的页面上发送一个新令牌,或者每个会话应该持有一个令牌。第一种情况意味着只有最后加载的页面/表单才能提交(如果用户打开了其他页面的多个选项卡,这可能会出现问题)。
这是一个可用于生产的安全解决方案吗?
另外,还有哪些其他可行的解决方案可以达到相同的目标?
【问题讨论】:
-
JWT 与 API 身份验证有关,我认为不需要 CSRF,因为您已经使用 JWT 对您的请求进行了身份验证,或者您可以阻止跨源请求并将其限制在某些域中
-
我认为您没有阅读我的帖子,但无论如何,请参阅此处为什么在 cookie 中存储身份验证令牌时需要 CSRF 保护stormpath.com/blog/…
标签: javascript php cookies csrf jwt