代码之家  ›  专栏  ›  技术社区  ›  JM-AGMS

保护Cordova上的postMessage()

  •  14
  • JM-AGMS  · 技术社区  · 7 年前

    postMessage() . 然而,通过我的测试,我的移动应用程序的起源总是 localhost:8000 file:// . 此站点上的其他所有示例都使用唯一的域和源(例如。www.example.com),但我的出身显然不是独一无二的。

    如果我的来源是 localhost:8000 文件:// ? 如果出于任何原因,我不能,我可以使用访问令牌来验证任何通信如下所示?

    移动应用程序

    var iframe = document.getElementById('iframe');
    var data = {
      'access_token': 'whatever'
    };
    iframe.contentWindow.postMessage(data, 'localhost:8000');
    

    网站.com

    window.addEventListener('message', function(event) {
      if (!event.data || !event.data.access_token) {return;}
      // ajax request to validate the token here
    });
    

    如果有帮助的话,我正在做的事情是:

    • 检测iframe何时完成加载。iframe发回一个对象。 {'loaded':true}
    • 发送带有布尔值的对象 用户注销时的iframe。 {'logout':true}
    • 发送带有布尔值和html字符串的对象 用户按下打印按钮时的iframe。 {'print':true, 'html':htmlString}
    • 将加密的有效负载发送到iframe,然后等待iframe返回一个对象。 {'success':true}
    1 回复  |  直到 7 年前
        1
  •  0
  •   C.Vergnaud    7 年前

    使用postMessage发送数据时,可以通过指定https://... 在源url中。

    使用这种程序是一个跨站点脚本的入口,您应该在web应用程序和移动端验证呼叫者和被呼叫者。这里提供了更多关于postMessage的规范(以及关于威胁的有用考虑): https://developer.mozilla.org/fr/docs/Web/API/Window/postMessage