接收消息时是否需要对源检查进行硬编码?

Does the origin check need to be hardcoded when receiving a message?

提问人:Chris Walsh 提问时间:9/13/2023 更新时间:9/13/2023 访问量:15

问:

我们总是被告知在信任/处理传入消息之前检查它的来源,因为任何域都可以将消息发送到任何其他域。我明白了,但是我是否必须将源与硬编码字符串进行比较,或者我可以简单地提取我的代码当前运行的域?

例如,这是示例中所说的您必须执行的操作:

function receiveMessage(event)
{
  if (event.origin !== "http://YOURDOMAIN.org")
    return;
  // ..process message..
}
window.addEventListener("message", receiveMessage, false);

但是我不能平等地使用它吗?

// Determine origin from url (once only)
const origin = (function (w) {
    var arr = w.location.href.split("/");
    return arr[0] + "//" + arr[2];
})(window);

function receiveMessage(event)
{
  if (event.origin !== origin)
    return;
  // ..process message..
}
window.addEventListener("message", receiveMessage, false);

我问的原因是,我的代码可以在几个测试/暂存和演示环境中的任何一个上运行,而不仅仅是我们的生产环境,并且每个环境都在一个单独的域中。谢谢。

JavaScript 后消息

评论

2赞 CBroe 9/13/2023
postMessage 的主要目的是允许跨域通信 - 因此,除非您使用它在同一源内进行通信,否则我不明白提取运行此接收代码的如何帮助?
0赞 Quentin 9/13/2023
如果你使用同源的它,那么仅仅摆脱它可能会大大简化你的代码。

答: 暂无答案