微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CORS $.ajax会话cookie(access-control-allow-credentials&withCredentials = true)

我意识到这个问题已经被问过十几次了,每个回答都表明我做得对,但也许我错过了一些东西.

AJAX像这样提供CORS请求……

$.ajax({
url: 'someotherdomain.com',type: 'post',data: {key: 'value'},dataType: 'json',async: false,crossDomain: true,beforeSend: function(xhr){
    xhr.withCredentials = true;
},success: function(x,status,xhr){

},error: function(xhr,error){

}
});

PHP提供如此的CORS请求……

header('Access-Control-Max-Age: 1728000');
header('Access-Control-Allow-Origin: http://someotherdomain.com');
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Allow-Headers: Content-MD5,X-Alt-Referer');
header('Access-Control-Allow-Credentials: true');
header("Content-Type: application/json; charset=utf-8");

根据所有文档,只要“Access-Control-Allow-Credentials”服务器端标头和“withCredentials = true”客户端标头设置,域之间的会话cookie处理应该是透明的.我错过了什么吗?

async: false

阻止会话cookie在每个请求上被发送回服务器.以下修复了它.

async: true

虽然这确实允许浏览器在进行跨源请求共享调用时设置会话cookie,但我现在遇到以下情况的问题:

服务器A向客户端发送响应
使用CORS的客户端发出服务器B的请求

XMLHttpRequest -> PHP -> Session handler -> MysqL -> Stored Procedure

由于PHP会话管理中的MUTEX锁定,异步性质和显然,要求可能会强制解决使用不同的头选项(如XCookie或类似的东西)手动设置cookie以保持服务器会话和客户端请求同步.

这个特殊的工作并不适合我,因为我相信它会为会话劫持和会话重播攻击向量打开一个简单的旅行通道.

使用SSL / TLS包装的连接可能有助于防止上述情况,但就为客户端独立提供安全措施而言,我认为这不足以满足要求.

对此有何想法的人?

原文地址:https://www.jb51.cc/ajax/160229.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐