django - 使用存储在 HttpOnly cookie 中的 JWT token 进行 Dj 休息身份验证

标签 django cookies django-rest-framework jwt dj-rest-auth

我正在制作一个 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/

相关文章:

python - django wsgi错误没有找到名为站点名称的模块

java - 如何通过 Java Servlet 在整个域名上设置 cookie?

python - Django-rest-framework 教程获取特定片段时出现内部服务器错误

python - Django:每次请求都是 404

django - 切换到 PostgreSQL 加载数据转储失败

python - 如何更改/添加 Django 的 ListView 的响应 header ?

php - 如何使用 PHP 和 MySQL 检测用户在完成预订过程之前是否关闭浏览器或选项卡?

internet-explorer - 无法在 IE 中的 IFRAME 中设置 cookie,即使使用 P3P header

python - djangorest框架在create中动态设置外键

django - 如何使用 Django Rest Framework 将上传进度条与 s3 存储桶上的上传同步