【发布时间】:2012-06-28 18:08:20
【问题描述】:
我对 django 中的 CSRF 保护一无所知。例如我们有一些恶意网站。从这个站点发送get-request到csrf受保护的url,解析页面并获取csrf值,然后用这个值发布有什么问题?
【问题讨论】:
标签: django csrf django-csrf
我对 django 中的 CSRF 保护一无所知。例如我们有一些恶意网站。从这个站点发送get-request到csrf受保护的url,解析页面并获取csrf值,然后用这个值发布有什么问题?
【问题讨论】:
标签: django csrf django-csrf
例如,我们有一些恶意网站。发送有什么问题 从该站点获取请求到 csrf 保护的 url,解析页面并 获取 csrf 值,然后用这个值发布?
如果您这样做,CSRF cookie 的会话副本将不匹配,您的请求将被拒绝。
另外,需要注意的是,仅针对 HTTPS 请求进行引荐来源网址检查,以防止出现MitM 漏洞。
请参阅this django wiki entry 了解有关 CSRF 保护如何工作的讨论,以及专门讨论 MitM 攻击的this SO question。
【讨论】:
Django 的 CSRF 的主要用途在 Django Docs (https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-it-works) 中有说明:
这确保只有来自您网站的表单 可用于 POST 数据返回。
所以它会检查几件事 - cookie、引荐来源网址、发布的价值。并且有一些限制,您不能总是随意修改所有这些值。例如 - 您可以在 AJAX 调用中设置 X-CSRFToken 令牌和 POST 值,但浏览器不允许您覆盖引用标头...您可能会成功使用 urllib2 或类似库成功执行 POST,但这不受 CSRF 保护的影响,因为它与您在页面上发布的内容相同。 再说一遍 - CSRF 意味着跨站请求伪造,它是它所保护的。
【讨论】:
logged in users.
REFERRER 将被检查。如果 REFERRER 确实对应于正确的 URL,则 POST 数据无效。
【讨论】: