Django中的CSRF保护

时间:2012-06-27 10:21:00

标签: django csrf django-csrf

我在django中没有得到关于CSRF保护的一件事。例如,我们有一些恶意网站。将此站点的get-request发送到csrf protected url,解析页面并获取csrf值,然后使用此值发布有什么问题?

3 个答案:

答案 0 :(得分:3)

  

例如我们有一些恶意网站。有什么问题要发送   从这个站点获取请求到csrf protected url,解析页面和   获取csrf值,然后使用此值发布?

如果您这样做,CSRF cookie的会话对应部分将不匹配,您的请求将被拒绝。

此外,应该注意的是,仅针对HTTPS请求进行引荐来源检查,以防止MitM漏洞。

有关CSRF保护如何工作的讨论,请参阅this django wiki entry,以及专门讨论MitM攻击的this SO question

答案 1 :(得分:1)

Django的CSRF的主要目的在Django Docs中解释(https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-it-works):

  

这确保了只有源自您网站的表单   可用于POST数据。

所以它会检查几件事 - cookie,referrer,post value。并且存在一些限制,您无法随意修改所有这些值。例如 - 您可以在AJAX调用中设置X-CSRFToken令牌和POST值,但浏览器不允许您覆盖引用者标题...您可能成功使用urllib2或类似库成功执行POST,但是这样不受CSRF保护的限制,因为它与您在页面上发布的内容相同。 再次 - CSRF意味着跨站点请求伪造,它是它保护的。

答案 2 :(得分:0)

将检查REFERRER。如果REFERRER确实对应正确的URL,则POSTing数据无效。