确保消息后的跨源性

问题描述 投票:1回答:1

我在不同的域名上有两个网页,我控制两个网页的代码。

Domain-A打开Domain-B,使用 window.open 然后Domain-B做一些客户端的处理(不能移到服务器端),然后用 postMessage 将结果发回来。

但在发布这些结果之前,我想先确认一下... ... window.opener 其实就是我。

问题是。A域会有变化 并且可以是任何东西(客户把我的应用托管在自己的域名上),而Domain-B是固定的。所以我不能只把 targetOrigin 在我 postMessage因为产地一直不一样。我知道我可以简单地使用 '*' 就能正常工作,但这还不够安全。

所以在发送 postMessage 我想确认一下我的网页是否真的被人... window.opened 鄙人 而承载代码的域--则不同。

我想到的唯一解决方案是异步加密。将一个公钥加密的签名查询字符串添加到 window.open 然后通过以下方式验证该签名 crypto.subtle.verify 在B域使用配对密钥。

我的做法正确吗?有没有更简单的选择,甚至可能是最佳实践?似乎我在重新发明轮子......

javascript cross-domain postmessage
1个回答
1
投票

使用跨源资源共享(CORS)是一个选项。有一个选项可以进行传递auth信息的凭证式请求。作为两个域的管理员,这就更容易了。你可以在你的域中使用Access-Control-Allow-Origin设置,允许他们进行凭证式请求。

MDN有一篇写得很好的文章,解释得比我好。https:/developer.mozilla.orgen-USdocsWebHTTPCORS

你可以在你的请求中包含头信息。https:/developer.mozilla.orgen-USdocsWebHTTPCORS#The_HTTP_response_headers。

而这一节会让人感兴趣,因为你想确保帖子是你的代码。https:/developer.mozilla.orgen-USdocsWebHTTPCORS#Requests_with_credentials。

© www.soinside.com 2019 - 2024. All rights reserved.