2012-06-27 97 views
1

我在django中没有得到关于CSRF保护的一件事。例如,我们有一些恶意网站。什么问题发送请求从本网站到csrf受保护的网址,解析页面并获得csrf值,然后发布这个值?Django中的CSRF保护

回答

0

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

1

Django的跨站请求伪造的主要目的在Django文档(https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-it-works)进行说明:

这可确保只有源自您的网站 的表单才能用于发回数据。

因此,它会检查几件事情 - Cookie,引荐,张贴值。而且有一些限制,你不能随意修改所有这些值。例如,您可以在AJAX调用中设置X-CSRFToken标记和POST值,但浏览器将不允许您覆盖引用标头......您可能会成功使用urllib2或类似的库执行成功的POST,但此操作不在CSRF保护范围内,因为它与您在页面上发布的内容相同。 再次 - CSRF意味着跨站点请求伪造,它是它所保护的。

+0

+1。 CSRF的意思是“跨站点请求伪造”,您可以始终获得crsf令牌并将其发布为已更改的数据,但CSRF针对的是已登录的用户。# –

3

例如我们有一些恶意网站。有什么问题请发送 从本站获取请求到csrf的受保护url,解析页面并获取csrf值,然后发布这个值?

如果您这样做,CSRF cookie的会话副本将不匹配,您的请求将被拒绝。

另外,应该注意的是,引用程序检查仅针对HTTPS请求完成,以防止MitM漏洞。

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

+0

什么是CSRF cookie的会话副本?如果用户已经登录了django csrf保护的站点。 – sunprophit