Mik*_*e42 3 django iframe csrf cross-domain
显然我在理解跨域环境中关于CSRF参数的Django(2.2.4)设置的影响时遇到了问题。
正如我已经注意到我必须设置 SESSION_COOKIE_SAMESITE = None是否要将我的 Django 应用程序放入具有另一个域的网站的 iframe(例如 foo.com 上的 Django 应用程序和 bar.com 上的 iframe),以便在我的 Django 应用程序上发送表单.
但是,CSRF 参数是什么?经过一些试验,我注意到如果我也在CSRF_COOKIE_SAMESITE = NoneDjango 设置中进行了设置,我只能在 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设置仅确定SameSite用于 CSRF 的指令(如果有)SetCookie。然后浏览器将使用该指令来确定是否在请求中包含 cookie。
该CSRF_TRUSTED_ORIGINS设置允许您对 Django 的默认行为进行例外处理,即严格检查具有 CSRF 保护的传入请求的Host和Referer标头。有关此检查的更多信息,请参阅文档。
所以,当你没有设置CSRF_COOKIE_SAMESITE为 时 None,Django 使用它的默认值'Lax',它指示浏览器不要发送带有不安全请求(如POST)的跨域 cookie 。由于未发送cookie,CSRF_TRUSTED_ORIGINS因此无关紧要。