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

rob*_*ley 2 cookies xss asp.net-mvc jquery 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;
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢

mon*_*sur 5

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

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

Access-Control-Allow-Credentials: true
Run Code Online (Sandbox Code Playgroud)

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

xhr.withCredentials = true;
Run Code Online (Sandbox Code Playgroud)

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

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