【发布时间】:2019-05-06 08:45:29
【问题描述】:
我的项目正在几个 3rd 方站点上部署 iframe,这些站点都是已知的并在 django 应用程序中注册。
在这些 iframe 中,用户可以触发一些 ajax 形式的事件。直接打开网站,一切正常。如果我打开包含 iframe 的第 3 方站点,django 在触发 ajax 事件 (403) 后会抛出错误,说 CSRF 失败。
在表单中,我使用了在 html 中设置的 {% csrf_token %}。但是通过 iframe 调用站点时并没有设置相应的 cookie(在浏览器中都使用了检查模式发现)。
我知道我可以使用装饰器 @csrf_exempt,但这会同时禁用 csrf 保护,我不想这样做。
所以我的问题是:
- 当整个页面通过 iframe 加载时,为什么 django 不设置 CSRF Cookie?
- 是否可以让 django 设置 cookie 或者是否可以只从 csrf 中排除已知 url?
- 有什么我看不到的方法吗?
非常感谢您的宝贵时间! :)
【问题讨论】:
-
我不知道,但是 CSRF 意味着跨站点请求伪造,并且在第三方服务器上的 iframe 中部署站点是一种跨站点,对吗?它不起作用的事实意味着它实际上按预期工作。