显然,我无法理解跨域环境中 Django (2.2.4) 设置对 CSRF 参数的影响。
正如我已经注意到的那样,我必须设置SESSION_COOKIE_SAMESITE = None
如果我想将我的 Django 应用程序放入具有另一个域的网站的 iframe 中(例如 foo.com 上的 Django 应用程序和 bar.com 上的 iframe),以便在我的 Django 应用程序上发送表单。
但是 CSRF 参数又如何呢?经过一番试验后,我注意到如果我还设置了,我只能在 iframe 中发送 Django 表单CSRF_COOKIE_SAMESITE = None
在 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 的行为。您需要确保两者都设置正确。
The CSRF_COOKIE_SAMESITE https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-CSRF_COOKIE_SAMESITE设置只是决定什么SameSite https://owasp.org/www-community/SameSite指令(如果有)用于 CSRFSetCookie https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie。然后浏览器将使用该指令来确定是否在请求中包含 cookie。
The CSRF_TRUSTED_ORIGINS https://docs.djangoproject.com/en/dev/ref/settings/#csrf-trusted-origins设置允许您对 Django 严格检查的默认行为进行例外处理Host
and Referer
带有 CSRF 保护的传入请求的标头。看文档 https://docs.djangoproject.com/en/dev/ref/csrf/#how-it-works有关此检查的更多信息。
所以,当你没有设置时CSRF_COOKIE_SAMESITE
to None
,Django使用它的默认值'Lax'
,它指示浏览器不要通过不安全的请求跨域发送cookie(例如POST
)。由于 cookie 没有发送,CSRF_TRUSTED_ORIGINS
是无关紧要的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)