【发布时间】:2021-04-15 17:21:50
【问题描述】:
我阅读了很多关于 JWT 的文章,发现很难以安全的 CSRF 和 XSS 证明方式使用它们。
直到我意识到我的令牌可能不会离开我的唯一域......
这让我想到了实现的想法:
- 使用刷新令牌和访问令牌。这样,我可以为访问令牌设置较短的过期时间并限制数据库调用以验证用户,并且仅在访问令牌过期时通过询问数据库刷新令牌未列入黑名单,然后再将新的访问令牌发送到用户。
- 我知道,如果我将令牌存储在本地/会话存储中,它将容易受到 XSS 攻击,但如果我将其存储在仅 HTTP 的 cookie 中,则会容易受到 CSRF 攻击。
- 由于我不需要访问 JavaScript 中的令牌并且我只需要在一个网站中使用此令牌,我认为我可以将访问令牌存储在仅 HTTP 的 cookie 中(这样就可以防止 XSS ) 以及设置为严格的安全标志和相同的站点标志(防止 CSRF)。
- 关于刷新令牌,我可以将其存储在具有相同安全标志但这次没有相同站点标志的仅 HTTP cookie 中。因为服务器永远不会仅基于刷新令牌执行任何操作,我认为它因此不会受到 CSRF 攻击。服务器对刷新令牌唯一要做的就是发回一个新的访问令牌,如果我理解得很好,CSRF 攻击者无法读取该令牌。 CSRF 漏洞允许攻击者向服务器发出请求(服务器将自动包含仅 HTTP cookie),但他无法读取该请求的响应。
我不知道 JWT 的这种实现是否安全,或者我是否遗漏了什么......
这就是我要问您(JWT 和网络安全专家)的问题,这会是一个好的 JWT 实施吗?
【问题讨论】:
-
我认为您只需要一个带有服务器端会话的普通旧会话 ID。 JWT 对您的用例的好处几乎为零,但复杂性无助于安全性。
标签: security web cookies jwt token