window.postMessage()+ iframes +开发人员工具的安全问题

时间:2017-08-07 16:07:48

标签: javascript security iframe xss postmessage

我已经了解了在使用window.postMessage()时如何避免安全问题 - 尤其是MDN doc中的建议。

但鉴于所有预防性提示都是客户端的,我很难理解他们如何阻止不良演员简单地编辑更改开发人员工具中的代码。

这是我正在处理的情况。我有一个包含嵌入式iframe的页面,我可以控制iframe(它位于一个单独的域中,但提供它的供应商允许我将自定义JavaScript放在iframe源中)。父窗口和iframe将来回通信。

/**
  window at https://firstgoodorigin.com

  Receives message from iframe to indicate
  its contents have loaded.

  Once that message has been received,
  send a message back to the iframe.
*/
function handleMessage(message) {
  if (message.origin === 'https://secondgoodorigin.com') {
    // verify and sanitize what's in message.data
    // (it'll be something like "loaded")
    // if it's good, send a message back
    message.source.postMessage('foo', 'https://secondgoodorigin.com');
  }
}

window.addEventListener('message', handleMessage, false);


/**
  iframe at https://secondgoodorigin.com

  Tell parent window it has loaded. Once that happens
  it will receive a message from the parent window, for
  which we add an event listener.
*/
window.addEventListener('load', () => {
  window.parent.postMessage('loaded', https://firstgoodorigin.com);
});

window.addEventListener('message', (message) => {
  if (message.origin === 'https://firstgoodorigin.com') {
    // verify and sanitize what's in message.data
    // do stuff
  }
});

鉴于窗口源和iframe源都可以在某人的网络检查器中编辑,有什么能阻止他们删除所有验证逻辑并用恶意代替它?我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

如评论所述,如果最终用户可能想要编辑,浏览器中的任何代码都可以编辑。锁定postmessages的目的是阻止第三个网站发布不需要的消息。

如果用户登录到相关网站,然后加载恶意网站,该网站可能会在iframe或弹出窗口中加载相关网站,然后将未经授权的邮件发布到网站。