当前位置: 首页 > 面试题库 >

CORS $ .ajax会话cookie(访问控制允许证书和withCredentials = true)

湛文乐
2023-03-14
问题内容

我知道这个问题已经被问了十二遍或更多遍了,给出的每一个回答都表明我做对了,但也许我遗漏了一些东西。

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){

}
});

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包装的连接可能有助于防止上述情况,但是就为客户端独立提供安全措施而言,我认为这不足够。

有人对此有任何想法吗?



 类似资料:
  • 问题内容: 我试图使CORS请求正常工作。使用以下JS代码,我得到此错误: 这是JS代码: 当我使用chrome的devtools查看网络时,我发现确实没有标题。但是,当我手动加载该网站时,它就存在了! 我使用以下代码设置标题: 希望能有所帮助! 问题答案: 它说这意味着您的服务器应用程序需要调整以接受跨源请求。由于安全原因,默认情况下跨源请求不起作用。您需要启用它们。 对于django,有一个维

  • 我在AngularJS中创建了一个应用程序,并尝试调用Laravel API: MyApp(AngularJS):http://localhost:8080/ API(Laravel样板文件):http://localhost:8000/ api_routes.php:

  • 我正在从主机(http://abc.com.au)向主机http://localhost:8081上运行的Spring Cloud API网关发送ajax请求。 jquery AJAX请求代码。 SimplifiedAdoptionBulkUpload.jsp spring cloud gateway cors配置。 我在chrome控制台中遇到以下错误。 SimplifiedAdoptionBu

  • 问题内容: 我看到以下错误: 使用此代码: 是什么原因引起的,如何解决? 问题答案: 在当前域之外发出ajax请求时,Javascript是受限制的。 例1:您的域名为example.com,并且您想向test.com提出请求=>您不能。 例2:您的域名是example.com,并且您想向inner.example.com发送请求,但是您不能。 例3:您的域名为example.com:80,并且您

  • 我正在尝试将webUntis(文档)API用于学校项目。现在,我只是尝试建立与API的任何类型的连接。 此代码产生以下错误消息: 已阻止跨源请求:同一源策略禁止读取位于的外部资源https://api.webuntis.dk/api/status(原因:缺少CORS标头“访问控制允许来源”)。 这个问题可能如何解决?也许我的API密钥是错误的? 免责声明:错误消息是从德语翻译过来的。

  • 我将JSON对象存储在Amazon S3中,我想从Javascript直接从S3加载数据。我的GET看起来很普通: 我得到以下错误: 我可以使用curl从S3获取URL,或者直接从浏览器导航到S3。我真的要通过自己的服务器代理所有这些请求吗?