使用CORS(Access-Control-Allow-Origin)响应标头集进行XSS时,不会在ajax请求标头中发送Cookie

时间:2013-01-16 16:16:15

标签: jquery asp.net-mvc cookies xss cors

我似乎无法在浏览器中使用javascript设置cookie作为jQuery ajax请求的一部分发送到子域Web应用程序。

我有两个Web应用程序,一个在根域,另一个在子域。为了解决跨站点脚本限制,我的子域Web应用程序实现了一个全局操作过滤器,以将Access-Control-Allow-Origin标头添加到其所有http响应的根域中。这允许从根域到子域的ajax调用工作。

但是,当我使用以下代码在javascript中创建cookie时......

var myDate = new Date();
myDate.setMonth(myDate.getMonth() + 12);
document.cookie = 'searchId=' + ids.generateGUID() + ';domain=' + ".root.example.com" + ';path=/;expires=' + myDate;

... cookie未在后续的ajax请求中传递给子域服务器。

我认为CORS标头并在cookie中设置域和路径将允许子域Web应用程序访问cookie但浏览器(chrome 21.0.1180.89& firefox 17.0.1)似乎不提供饼干。

在使用子域和ajax请求时,我是否误解了浏览器cookie访问限制?

由于

1 个答案:

答案 0 :(得分:5)

为了使cookie能够与CORS一起使用,您需要做两件事。

首先,您的服务器需要使用以下标头进行响应:

Access-Control-Allow-Credentials: true

其次,您的XmlHttpRequest对象需要设置withCredentials属性:

xhr.withCredentials = true;

这应该在请求中发送远程域cookie,尽管cookie必须由远程服务器设置。

您的JS代码本身仍然无法访问Cookie,也无法在远程域上设置Cookie。 AFIAK没有办法让JS代码访问另一个域的cookie。