【发布时间】:2014-03-08 12:51:01
【问题描述】:
django 应用程序中的 CSRF 预防支持通过 cookie 将 CSRF 令牌向下发送到客户端,并在标头 (X-CSRFToken) 或 cookie 中接受来自客户端的 CSRF 令牌。这适用于非 CORS、非 AJAX Web 应用程序。但是,如果您 a) 有一个通过 AJAX 与服务器通信的单页 Web 应用程序,并且 b) 单页 Web 应用程序托管在与服务器 (CORS) 不同的域中,则它似乎不起作用。
问题是由于 CORS 限制,单页 webapp(来自 domain1)无法使用 xhr.getResponseHeader 或 getCookie 读取服务器域(domain2)cookie。鉴于无法读取 cookie,javascript webapp 如何将适当的 CSRF 令牌发送到服务器?
xhr.getResponseHeader api 被限制检索 Set-Cookie 或 Set-Cookie2 标头(按规范),并且各种支持 CORS 的浏览器似乎强制执行此限制。同理,getCookie JS 函数会读取 webapp 域(domain1)中所有非 httpOnly cookie,但不会读取服务器在其域(domain2)中设置的那些。
这在非 CORS 情况下不是问题,但在我们的应用程序中,我们希望将 API 托管在与客户端 webapp 不同的域中。有什么建议?
【问题讨论】:
-
您解决了这个问题吗?听起来你和我有同样的问题。
-
不,从未解决。
-
如果这个问题还没解决,可以试试:cistoner.org/blog/minhaz/2014/03/08/…
标签: jquery ajax cookies cors django-csrf