【问题标题】:Understanding Django CSRF_COOKIE_SAMESITE and CSRF_TRUSTED_ORIGINS了解 Django CSRF_COOKIE_SAMESITE 和 CSRF_TRUSTED_ORIGINS
【发布时间】:2019-08-20 08:23:44
【问题描述】:

显然,我很难理解 Django (2.2.4) 设置对跨域环境中 CSRF 参数的影响。

正如我已经注意到的那样,如果我想将我的 Django 应用程序放入具有另一个域的网站的 iframe 中(例如 foo.com 上的 Django 应用程序和 bar.com 上的 iframe),我必须设置 SESSION_COOKIE_SAMESITE = None 以便在我的 Django 应用程序上发送表单。

但是,CSRF 参数是什么?经过一些试验,我注意到如果我还在 Django 设置中设置了CSRF_COOKIE_SAMESITE = None,我只能在 iframe 中发送 Django 表单。

但是CSRF_TRUSTED_ORIGINS 是干什么用的?如果我将 iframe 域(例如 bar.com)设置到列表 ['bar.com'] 而不是 CSRF_COOKIE_SAMESITE = None 我无法在 iframe 中的 Django 应用程序上发送表单。

谁能解释CSRF_TRUSTED_ORIGINS在什么情况下有什么作用?它是否只能在一个域和多个子域的环境中使用?

感谢任何提示!

【问题讨论】:

    标签: django iframe cross-domain csrf


    【解决方案1】:

    简单地说:CSRF_COOKIE_SAMESITE 影响浏览器的行为,而CSRF_TRUSTED_ORIGINS 影响 Django 的行为。您需要确保两者都设置得当。

    CSRF_COOKIE_SAMESITE 设置只是确定了用于 CSRF SetCookieSameSite 指令(如果有)。然后浏览器将使用该指令来确定是否在请求中包含 cookie。

    CSRF_TRUSTED_ORIGINS 设置允许您对 Django 的默认行为进行例外处理,即严格检查带有 CSRF 保护的传入请求的 HostReferer 标头。有关此检查的更多信息,请参阅 the documentation

    所以,当您没有将CSRF_COOKIE_SAMESITE 设置为None 时,Django 使用其默认值'Lax',这指示浏览器不要发送带有不安全请求的cookie 跨域(如POST) .由于没有发送 cookie,CSRF_TRUSTED_ORIGINS 无关紧要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      • 2020-04-16
      相关资源
      最近更新 更多