我正在制作一个 Django Rest Framework 应用程序,该应用程序具有 JWT 身份验证,并且 token 存储在 HttpOnly cookie 中。身份验证是通过读取 access
cookie 来执行的。我正在使用 dj-rest-auth
用于此目的的库,但我对这种方法的安全方面有点困惑。知道将身份验证数据存储在 cookie 中可用于执行 CSRF 攻击,针对我上面描述的特定情况,如何保护其 Web 免受此类攻击?所有 cookie 均设置为 SameSite=Lex
。
我还需要发送从后端获取的 X-CSRFTOKEN
header 吗?这意味着对 api 的每个请求都需要具有该 header 。拥有所有这些库的最佳设置应该是什么?
最佳答案
OWASP 基金会创建了一份关于如何防止 CSRF 攻击的详细备忘单:https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html
有两件事值得记住:
CSRF 仅关注数据更改请求,因此 POST/PUT/PATCH/DELETE 方法。执行 CSRF 攻击的攻击者无法读取服务器的响应,因此 GET 请求不是您关心的问题。
防止 CSRF 的最常见方法是使用 csrf token 。服务器应为用户 session 创建 token ,并将 token 保存在前端,但不保存在 cookie 中。然后,您可以在 header 中或作为请求正文的一部分发送该 token 。然后,服务器验证该 token 是否与该用户 session 的 token 相同。
如果您不想将 token 保留在服务器中,您还可以将其保存在 cookie 中。因此,前端会将 token 保存在两个位置 - 一个在内存中/在隐藏的表单字段中/等等。和 cookies 中的另一个。然后服务器可以检查 cookie 中的值是否与 header/body 中的值匹配。
关于django - 使用存储在 HttpOnly cookie 中的 JWT token 进行 Dj 休息身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70644941/