【问题标题】:CSRF protection in DjangoDjango 中的 CSRF 保护
【发布时间】:2012-06-28 18:08:20
【问题描述】:

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

【问题讨论】:

    标签: django csrf django-csrf


    【解决方案1】:

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

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

    另外,需要注意的是,仅针对 HTTPS 请求进行引荐来源网址检查,以防止出现MitM 漏洞。

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

    【讨论】:

    • CSRF cookie 的会话对应物是什么?如果用户已经登录 django csrf-protected 站点。
    【解决方案2】:

    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 意味着跨站请求伪造,它是它所保护的。

    【讨论】:

    • +1。 CSRF 的意思是“跨站点请求伪造”,您始终可以获取 crsf 令牌并将其与更改的数据一起发布,但 CSRF 的目标是您的 logged in users.
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2020-04-14
      • 1970-01-01
      • 2019-07-14
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 2015-01-13
      • 2013-11-03
      相关资源
      最近更新 更多