django - 了解 Django CSRF_COOKIE_SAMESITE 和 CSRF_TRUSTED_ORIGINS

标签 django iframe cross-domain csrf

显然,我无法理解 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/

相关文章:

python - 如何避免 `obj.save()`不更新 `updated_at`字段?

iframe - 如何在 youtube Iframe 上禁用全屏?

html - iframe 100% 高度问题

javascript - 从 Chrome 扩展访问 iframe URL

python - 如何解决 django.core.exceptions.ImproperlyConfigured : Requested setting INSTALLED_APPS error?

python - 无法在 DjangoGirls 教程中部署到 Heroku

python - 评论模型仅适用于用户 django(1048, “Column ' user_id'不能为空”或没有用户填写)

jquery - 如何使用 Iframe 关闭 jQuery 对话框

javascript - 我可以从另一个域上的 iframe 父级访问 javascript

jquery - Tomcat CORS 过滤器和 Spring Security