gpt4 book ai didi

jquery - django:csrf_token用于单个页面上的多个表单和ajax请求

转载 作者:行者123 更新时间:2023-12-01 07:49:21 25 4
gpt4 key购买 nike

我的网站有一个页面,其中包含 2 个表单和 3 个基于 ajax 的 POST 调用。我在其中一种表单中使用了csrf_token。另外,为了能够执行 csrf 安全的 ajax 调用,我正在使用官方文档上发布的指南:https://docs.djangoproject.com/en/1.7/ref/contrib/csrf/和这个博客:https://realpython.com/blog/python/django-and-ajax-form-submissions/

按照建议,通过使用这段代码 https://gist.github.com/broinjc/db6e0ac214c355c887e5在我的 javascript 文件中,我似乎能够毫无问题地执行 POST 请求。

问题:

  1. 在其中一种表单中使用 csrf_token 以及 javascript 代码(如上所述)足以确保 csrf 伪造吗?我应该在第二种形式中使用csrf_token吗?
  2. 正如这篇 SO 帖子中所建议的 Generating CSRF tokens for multiple forms on a single page看来使用相同的 token 应该没问题。但是,需要明确的是,我在第一个表单中使用 {% csrf_token %} 而不是帖子中提到的隐藏字段。而且我在第二种形式中没有使用任何csrf_token
  3. 我应该为我的 ajax 调用做一些额外的事情吗?或者它们可以吗?
  4. 有没有办法在 views.py 函数中检查调用是否 csrf 安全?

如果您需要更多信息,请告诉我,我很乐意进一步详细说明。

最佳答案

Is using csrf_token in one of the forms along with the javascript code (mentioned above) sufficient to ensure csrf forgery? Should I be using csrf_token in the second form?

我希望不会;)启用CsrfViewMiddleware Django 中的内容足以确保您的 View 免受跨站点请求伪造的影响。如果您使用两个单独的 HTML 表单(两个 <form></form> 标签),则两个表单都需要具有隐藏的 CSRF token 字段。如果您在一个 form 中使用两个 Django 表单标签,您只需要一次。

如果该 javascript 代码片段会随任何请求发送 token ,而不仅仅是 AJAX 请求,那么您只需要一次 token ,但我不相信它会这样做,因此您在每个 HTML 表单中都需要它。

As suggested in this SO post Generating CSRF tokens for multiple forms on a single page it seems using same token should be fine. However, just to be clear, I am using {% csrf_token %} in my first form and not a hidden field as mentioned in the post. And I am not using any csrf_token in my second form.

{% csrf_token %}标签为您创建一个隐藏字段,因此本质上您正在使用隐藏字段。

Should I be doing anything extra for my ajax calls or are they fine?

您包含的 JavaScript 将 header 设置为每个 AJAX 请求上的 CSRF token 的值。此 header 替换通常由表单中的隐藏字段发送的发布数据。您通过 jQuery 发送的任何 AJAX 调用都将具有此 header ,您无需执行任何其他操作。

Is there a way to check in views.py function that the call is csrf safe?

不是真的。只要你有CsrfViewMiddleware已启用并且您没有使用 csrf_exempt装饰者,您的 View 受到保护。如果调用不安全,中间件将返回 403 Forbidden在请求到达 View 之前响应。

关于jquery - django:csrf_token用于单个页面上的多个表单和ajax请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31866435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com