【发布时间】:2015-09-02 05:55:52
【问题描述】:
到目前为止,我的应用运行良好,一切都通过访问其公共 IP 完成。
现在,它被添加到主站点 app.mainsite.com。 可以这样访问。我可以登录等等。
但我的应用有点特别,它的某个功能允许其用户在应用脚本嵌入 html 的任何第三方网站上的 iframe 中打开其中一个 URL,以执行一些特定于应用的活动在那些第三方网站上。现在,每个人都可以看到该应用程序为这些第三方网站带来的新内容,但要更改一些设置如何,必须登录到我的应用程序。如果没有,则会在模态本身内部重定向,如果登录成功,它们将被重定向到设置编辑页面。基本上,来自第三方网站的任何写入请求都需要网站所有者登录到我们的应用程序。他们可以在模态框内登录,或者从另一个选项卡登录,然后刷新他们的网站以进入编辑视图。
问题是,早些时候,这一切都完美无缺。
现在,我可以使用来自 app.mainsite.com 的 csrf 令牌进行表单发布,但是当它在 iframe 中打开时,它会抛出 CSRF cookie not set。
我检查了“资源”选项卡,在该选项卡下,app.mainsite.com 中的 csrftoken 与表单中的 csrfmiddlewaretoken 不匹配。
显然,CSRF 失败了。
我该如何克服这个问题?
我尝试设置CSRF_COOKIE_DOMAIN='.mainsite.com',但没有成功。
我能做什么?
【问题讨论】:
-
我了解您的问题,但如果不调查您的应用程序的工作原理,我不确定能否提供帮助。我不必处理来自嵌入到第三方站点的 iframe 中的 POST 请求,但它似乎应该可以正常工作。我将首先通过
CsrfViewMiddleware并调查它到底在哪里失败:github.com/django/django/blob/master/django/middleware/… 另外'.mainsite.com'设置适用于所有子域,您应该将其设置为:CSRF_COOKIE_DOMAIN='app.mainsite.com'
标签: django cookies cross-domain django-csrf cross-site