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