问题标签 [django-csrf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
529 浏览

django - Django 中的 CSRF 保护

我对 django 中的 CSRF 保护一无所知。例如我们有一些恶意网站。将 get-request 从该站点发送到受 csrf 保护的 url,解析页面并获取 csrf 值,然后使用此值发布有什么问题?

0 投票
1 回答
9803 浏览

django - 使用 @csrf_exempt 并在同一视图中创建 CSRF 令牌

我期待POST来自第 3 方服务器。我知道我需要使用@csrf_exempt装饰器来允许来自第 3 方服务器的帖子。我在 Ubuntu 12.04 上使用 Django 1.4 和 Python 2.7。

现在,我的视图将生成一个未绑定的表单,该表单将包含供用户填充的字段以及包含原始信息的隐藏字段POST。因此,第一个POST将启动第二个POST

第二个POST将从我的服务器发送到我服务器上的另一个视图。我试图弄清楚如何CSRF为我的表单生成令牌。

我正在尝试完全按照我在文档中阅读的内容进行操作。

我的views.py代码:

你现在在模板方面做什么?!?同样,从文档中我认为我应该执行以下操作:

我通过POST从 3rd 方服务器进行测试来测试这一点。有时我会看到完全生成的表单似乎是一个有效的CSRF令牌。

有时我会看到如下所示的失败:

然后我最终会得到这个错误:

一旦我收到CSRF verification failed错误,我将继续收到此错误,直到我清除 cookie 并重新开始。

谁能告诉我我做错了什么?我可以看到它与我如何生成CSRF令牌有关。根据文档中的内容,我不明白该过程是如何工作的。c在我看来是什么?我正在填充信息并传递给render_to_response. 好的,但是如何在模板中使用它?

我的模板应该是这样的:

如果不是,为什么?Django 怎么知道这c包含CSRF令牌?

任何帮助将不胜感激。

0 投票
2 回答
1883 浏览

jquery - Django + jQuery:为什么 CSRF 验证在多个同时请求时失败

我遇到了以下我想了解的情况(使用 Django1.4 和 jQuery 1.7.1):我通过 jQuery 'ajax' 函数提交了一个表单,在此请求完成之前,我单击了另一个提交相同表单的元素,但是使用 jQuery 的“提交”功能。我得到的响应 - 403,CSRF 验证失败。现在,当然,为了防止这个错误,禁用多个同时提交就足够了(它们自己工作正常),但这无助于理解特定错误的来源。

谁能解释一下?每个会话生成一次 csrf 令牌,因此对于后一个请求,它不会是某种 csrf 不匹配。这与 jQuery 处理请求的方式有关吗?

0 投票
2 回答
3467 浏览

django - Django 的 CSRF 保护是这样工作的吗?

作为 cookie、CSRF 和 Django(使用 1.4)的初学者,据我所知,这是它的工作原理,请纠正我哪里出错了......

以下适用于 django.middleware.csrf.CsrfViewMiddleware 包含在 MIDDLEWARE_CLASSES 元组中的情况。

如果 POST 表单包含csrf_token标签,并且相关视图传递RequestContext给模板,则请求页面意味着 Django 包含一个包含字母数字字符串的隐藏表单字段。Django 还向浏览器返回一个名称设置为csrftoken和值设置为相同字母数字字符串的 cookie。

收到表单提交时,Django 检查隐藏表单字段中的字母数字字符串值是否与从浏览器接收到的 csrftoken cookie 匹配。如果它们不匹配,则会发出 403 响应。

CSRF 攻击可能以包含 iframe 的恶意网站的形式出现。iframe 包括一个 POST 表单和一些 JavaScript。表单的action属性指向我的 Django 站点。该表单旨在在我的站点上做一些讨厌的事情,并且 JS 在加载 iframe 时提交表单。

浏览器会csrftoken在表单提交的标题中包含 cookie。但是,表单不会包含具有匹配字母数字字符串的隐藏字段,因此返回 403 并且攻击失败。如果 iframe JS 试图访问 cookie,以创建正确的隐藏表单字段,浏览器会阻止它这样做。

它是否正确?

0 投票
1 回答
1884 浏览

django - POST 403 Forbidden for Chrome extension with Django on backend

我以前从未开发过 Chrome 扩展程序,目前正在为我的 Django 驱动的应用程序开发 Chrome 扩展程序(具有链接提交功能)。当我尝试使用扩展程序提交链接时,出现以下错误:

这可以通过在 postdata JSON 中传递 csrfmiddlewaretoken 来解决,但是,显然我做不到

在 Chrome 扩展的 html 文件中。您如何将 csrf_token 从 Django 传递到 Chrome 扩展的 JavaScript?或者,有没有其他方法可以解决这个问题?这是来自 Chrome 扩展的 JS 代码的相关部分:

0 投票
0 回答
149 浏览

django - 接收 CSRF 失败。请求中止

我按照错误响应页面上的建议进行操作,但仍然无法正常工作。这是我的代码;

视图.py

icecream.html(模板)

网址.py

settings.py(相关部分)

我处于学习模式,所以这只是一个内部站点,我正在使用 localhost 访问它。我在学习这本书的其他章节之前从未遇到过这个问题。这是我第一次使用表单和发布。我在这个网站上查看了许多已回答的问题,但似乎没有任何帮助。感谢所有帮助。

0 投票
1 回答
3562 浏览

django - Django csrf 令牌

视图.py

我正在尝试将 csrf 令牌添加到我的表单中。我在上面的视图中生成 csrf 令牌。但是 csrf_token 值提供了一些像上面显示的代理对象而不是字符串。我正在使用 django 1.3。提前感谢任何形式帮助。

0 投票
1 回答
1892 浏览

django - django 的零星 403“CSRF FAILURECSRF cookie 未设置”错误

我们有一个刚刚开始向外界开放的小网站。在大多数情况下,它运行良好,但我们偶尔会收到来自其中一种表单的消息“CSRF FAILURECSRF cookie not set”的 403 错误。表单肯定{% csrf_token %}包含在内,我们的中间件如下所示:

该表格对大多数人都适用,但我大约每天都会收到一封包含失败案例的电子邮件。电子邮件包含实际请求,如下所示(我已经删除了其余的 POST 数据以隐藏私有数据,但留下了 csrfmiddlewaretoken):

CSRF_COOKIE 与 csrfmiddlewaretoken 不匹配,我假设这是导致问题的原因,但我无法弄清楚这些提交是如何不同步的,而其他提交则不然。该页面是一个非常简单的表单,只有几个字段。

关于我应该在哪里看的任何建议?我通过 apache 使用 mod_wsgi 在 CentOS 上运行最新的 Django 1.4.1。

编辑:与成功的请求相比,唯一看起来奇怪的另一件事是这里的COOKIES:{}部​​分是空的,这会让我怀疑他们可能只是在浏览器中禁用了 cookie,但是为什么它会出现在 CSRF_COOKIE 中元部分?

谢谢你的帮助!

布兰登

0 投票
2 回答
1593 浏览

ajax - Django 中间件使用 ajax 使用 HTTPS POST 引发 403 错误

我对这里的很多部分(Django/Ajax 等)都很陌生,所以虽然我了解高级 CSFR 图片,但我对细节没有完整的处理。

由于传递的数据量较大,我需要将请求从 GET 转换为 PUT。高级别的,我正在通过 HTTPS 对 django 应用程序进行 AJAX POST API 调用。调用是从提供页面的同一域进行的。

但是,我不断收到“未设置 CSRF cookie”错误。

我正在使用 Django 1.4

为了通过 CSRF 保护,我在标题中包含了其他帖子中提到的 X-CSFRToken,并在发布的数据中包含了 {{ csrf_token }} 标记。但是,看起来该标签并没有被令牌替换。X-CSFRToken 值在请求中作为 NULL 发送。不知道为什么它没有设置。

我的印象是我不需要在页面视图中使用 ensure_csrf_cookie(),因为我在 ajaxSetup 中的 POST 之前获取了 cookie,但我也尝试过。

想法我做错了什么?

相关代码:

0 投票
2 回答
315 浏览

django - Django Book OUTDATE CSRF 保护

您好,我是一个新手,试图使用 django 注册一些用户,我一直在阅读 Django Book 并且正在阅读关于注册的章节,http://www.djangobook.com/en/2.0/chapter14/当我这样做时指示我明白了

禁止 (403)

CSRF 验证失败。请求中止。帮助

失败原因:

通常,当存在真正的跨站点请求伪造时,或者未正确使用 Django 的 CSRF 机制时,可能会发生这种情况。对于 POST 表单,您需要确保:

您看到此页面的帮助部分是因为您的 Django 设置文件中有 DEBUG = True 。将其更改为 False,将仅显示初始错误消息。

您可以使用 CSRF_FAILURE_VIEW 设置自定义此页面。

我将 {% csrf_token %} 模板标签放在post 标签内,它仍然给我这个错误。谢谢

形式