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

jas*_*as- 8 cookies ajax cors

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

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, status, error){

}
});
Run Code Online (Sandbox Code Playgroud)

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");
Run Code Online (Sandbox Code Playgroud)

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

jas*_*as- 4

async: false
Run Code Online (Sandbox Code Playgroud)

阻止每次请求时将会话 cookie 发送回服务器。以下修复了它。

async: true
Run Code Online (Sandbox Code Playgroud)

尽管这确实允许浏览器在进行跨源请求共享调用时设置会话 cookie,但我现在遇到了有关以下场景的问题:

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

XMLHttpRequest -> PHP -> Session handler -> MySQL -> Stored Procedure 
Run Code Online (Sandbox Code Playgroud)

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

这种特殊的解决方法并不适合我,因为我相信它会为会话劫持和会话重放攻击向量开辟一条简单的道路。

使用 SSL/TLS 封装的连接可能有助于防止上述情况,但就为客户端独立提供安全措施而言,我认为这还不够。

有人对此有什么想法吗?