gpt4 book ai didi

django - 了解 Django CSRF_COOKIE_SAMESITE 和 CSRF_TRUSTED_ORIGINS

转载 作者:行者123 更新时间:2023-12-04 02:45:01 49 4
gpt4 key购买 nike

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

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

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

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

谁能解释一下 CSRF_TRUSTED_ORIGINS 在什么情况下有任何影响?它只能在一个域和多个子域的环境中使用吗?

感谢任何提示!

最佳答案

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

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

CSRF_TRUSTED_ORIGINS那里的设置允许您对 Django 的默认行为进行异常(exception)处理,即严格检查带有 CSRF 保护的传入请求的 HostReferer header 。参见 the documentation有关此支票的更多信息。

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

关于django - 了解 Django CSRF_COOKIE_SAMESITE 和 CSRF_TRUSTED_ORIGINS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57569508/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com