Understanding Django CSRF_COOKIE_SAMESITE and CSRF_TRUSTED_O



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

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

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

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

谁能解释一下在什么情况下CSRF_TRUSTED_ORIGINS有任何影响?它是否只能在具有一个域和服务器子域的环境中使用?

感谢您的任何提示!

简而言之:CSRF_COOKIE_SAMESITE影响浏览器行为,而CSRF_TRUSTED_ORIGINS影响 Django 的行为。您需要确保两者设置正确。

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

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

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

相关内容

  • 没有找到相关文章

最新更新