我想保护我的应用程序免受 XSRF 的影响。虽然我不能真正理解问题是什么以及我的解决方案是如何工作的,但经过一些研究,我想出了一个解决方案,Angular 使用了这个解决方案。据我所知,我的解决方案需要以下步骤:
- 客户发送我的 SPA 请求。
- 我发送 XSRF 令牌(不是仅 HTTP,以便 JS 能够读取它)。我还将这个 XSRF 令牌保存到服务器上的用户会话中。
- 对于每个 POST 请求,我希望我的客户端读取 XSRF 令牌并
X-XSRF-TOKEN为此令牌设置标头。 - 我将通过检查请求标头和用户会话 XSRF 令牌是否匹配来检查每个请求。如果他们这样做,如果需要,我还将检查 JWT 进行身份验证。
- 验证 XSRF 令牌后,我将对数据库进行更改。此外,我将再次更改 XSRF-token,并将新令牌发送给用户,并更改会话的令牌。
但如果我有 XSS 漏洞,我不确定这有什么帮助,因为任何注入的 JavaScript 代码也可以这样做。我想了解这个问题以及这样的解决方案如何提供帮助。
仅供参考,我还在 Express 服务器上实现基于 JWT 的身份验证,使用 Redis 进行会话管理。