为了账号安全,请及时绑定邮箱和手机立即绑定

在发出 AJAX 跨源请求时,如何防止“与没有 SameSite 属性的跨站点资源集关联的 ”

在发出 AJAX 跨源请求时,如何防止“与没有 SameSite 属性的跨站点资源集关联的 ”

翻翻过去那场雪 2022-12-08 15:46:05
因此,我有两个站点 http://localhost/ 和 http://3rdPartyLocallyHostedAPI/(不是真实姓名)- 都是本地 Intranet 站点,并且由于同名的性质,必须向它发出3rdPartyLocallyHostedAPICORSlocalhost请求.这些请求工作正常,数据返回或可以3rdPartyLocallyHostedAPI按预期发布到,但是显示此警告:与 http://3rdPartyLocallyHostedAPI/ 上的跨站点资源关联的 cookie 设置时没有该SameSite属性。SameSite=NoneChrome 的未来版本将仅在设置了和的情况下为跨站点请求提供 cookie Secure。您可以在应用程序>存储>Cookie 下的开发人员工具中查看 cookie,并在https://www.chromestatus.com/feature/5088147346030592和https://www.chromestatus.com/feature/5633521622188032查看更多详细信息。现在,我查看了多个答案,例如这个,这个和这个说明需要在服务器上设置 SameSite 属性的答案,这没有任何意义,因为它所使用的两个 cookie 有问题 (ss -pid 和 ss-id) 在请求中设置,没有在响应中返回?这让我感到困惑,因为我不知道如何或在何处进行更改以确保将这些 cookie 上的 SameSite 策略设置为none或secure。我认为是执行 AJAX 请求的 jQuery 出了问题:// trimType and queryValue are determined elsewhere by some jQuery selections, their values are not important to the question being asked.$.ajax({    url: 'http://3rdPartyLocallyHostedAPI?q=' + trimType + '?q=' + queryValue + '&resultsOnly=true',    data: {        properties: (trimType === 'Record') ? 'Title,Number,RecordRecordType' : 'NameString'    },    xhrFields: {        withCredentials: true    },    dataType: 'json'}).done(function (data) {    if (data.Results.length > 0) {        $resultsPane.html('');        for (var i = 0; i < data.Results.length; i++) {            // Not relevant to the question being asked so removed, only some jQuery in here to display results on page.        }    } else {        $resultsPane.html('<p class="py-1 pl-1 list-group-item text-muted">No Results found.</p>');    }}).fail(function () {    $resultsPane.html('<p class="py-1 pl-1 list-group-item text-muted">No Results found.</p>');});
查看完整描述

1 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

好吧,我想我已经做了足够的研究来弄清楚我面临的问题,所以我会回答我自己的问题。


因此,真正帮助我真正理解 SameSite 是关于什么的一页是这一页,所以对于任何对 SameSite 有疑问的人,请阅读一下,以便您了解其背后的原因及其工作原理。


阅读了一些文章并看到了对另一篇文章的回答,这帮助我把这些点联系起来。我将我正在处理的网站部署到实际的网络服务器上,发现以下是响应标头:


HTTP/1.1 200 OK

Cache-Control: private,no-cache

Content-Type: application/json; charset=utf-8

Vary: Accept

Server: Microsoft-IIS/10.0

X-Content-Type-Options: nosniff

X-Powered-By: ServiceStack/4.512 NET45 Win32NT/.NET

X-AspNet-Version: 4.0.30319

Set-Cookie: ss-pid=0QyVIKf4edkAKd2h4be5; expires=Fri, 27-Jul-2040 09:58:39 GMT; path=/; HttpOnly

Set-Cookie: ss-id=fmM1WQsDxXGfR8q9GL6e; path=/; HttpOnly

Access-Control-Allow-Origin: http://server

Access-Control-Allow-Credentials: true

Access-Control-Allow-Methods: POST,GET,OPTIONS

Access-Control-Allow-Headers: Content-Type, Authorization

Persistent-Auth: true

WWW-Authenticate: Negotiate oYG2MIGzoAMKAQChCwYJKoZIgvcSAQICooGeBIGbYIGYBgkqhkiG9xIBAgICAG+BiDCBhaADAgEFoQMCAQ+ieTB3oAMCARKicARusah2q1K2ACHwoq1n6DCNq5rx/HFdbK5sU9EohnxrRSpzmelskTTa9xmW8wgeUdwRNQCqMsD/dZ/pUjhdl2CVWjmFZZAfnKl6JEker+s79E9uFXThZZKnqfpqEgSvvqSYpp1KMkaYBYd1uf5mRyE=

Date: Mon, 27 Jul 2020 09:58:40 GMT

Content-Length: 1597

Set-Cookie服务器发出两个标头来存储ss-id和的值ss-pid。这些 cookie显然代表 permanant session ID 和 session ID,并且由 ASP.NET 发布用于跟踪会话。浏览器不接受和设置这两个 cookie,因为它们缺少SameSite=none设置和Secure设置 - 这些是我在上面的帖子中提到的两个 cookie。


因此,要解决此问题,首先我需要切换到对 API(可能还有网站本身)使用 https - 我已经完成了,并以某种方式弄清楚如何让第 3 方 API 在其会话中设置 SameSite 属性相关的 cookie。


因此,对于希望完全控制您的 API 等的其他人,只要您在响应中创建/发送 cookie 时,您就应该能够设置这些属性,因此通过设置 和 将 cookie 从站点发送到其他SameSite=None域Secure。


查看完整回答
反对 回复 2022-12-08
  • 1 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号