在第三方网站上的iframe中访问时,Django csrf cookie未设置为子域

时间:2015-04-10 10:22:13

标签: django cookies cross-domain django-csrf cross-site

到目前为止,我的应用程序运行良好,当时所有操作都是通过访问其公共IP来完成的。

现在,它已被添加到主站点,如app.mainsite.com。 它可以像这样访问。我可以登录等所有内容。

但我的应用程序有点特别之处,它的某个功能允许其用户在任何第三方网站上的iframe中打开其中一个网址,其中应用程序的脚本嵌入在html中,以执行某些特定于应用的活动在那些第三方网站上。现在,每个人都可以看到应用程序带给第三方网站的新内容,但要更改一些设置,如何,必须登录到我的应用程序。如果没有,则会在模式本身内重定向,如果登录成功,则会将其重定向到设置编辑页面。基本上,来自第三方站点的任何写入请求都要求站点所有者登录到我们的应用程序。要么他们可以在模态中登录,要么从另一个选项卡登录,然后刷新他们的网站以便能够进入编辑视图。

问题是,早些时候,这一切都完美无缺。 现在,我可以使用app.mainsite.com上的csrf令牌进行表单发布,但是当它在iframe中打开时,它会抛出CSRF cookie not set

我检查了“资源”标签,然后在app.mainsite.com中的csrftoken与表单中的csrfmiddlewaretoken不匹配。 因此,CSRF显然失败了。

我怎样才能克服这个?

我尝试设置CSRF_COOKIE_DOMAIN='.mainsite.com',但这不起作用。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

您可以尝试在提供响应的视图周围添加@csrf_exempt装饰器......当然,这将禁用CSRF验证...

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def your_view(request):
    ...

答案 1 :(得分:1)

Turned out, it was a bug in the Ubuntu build of Chromium.是的,我正在使用Chromium(我使用Ubuntu作为我的操作系统)这个人在问题中提供的plnkr链接,它在Chromium中没有用。但它在Chrome和Firefox中运行良好

在Chrome和Firefox中也测试了我的应用;像以前一样工作。