在Cordova上保护postMessage()

时间:2018-10-15 18:53:53

标签: cordova iframe postmessage

我的Cordova移动应用程序使用iframe来加载网站。我想使用postMessage()通过iframe发送和接收内容。但是,通过我的测试,我的移动应用源始终是localhost:8000file://。此网站上的所有其他示例都使用唯一的域和来源(例如www.example.com),但我的来源显然不是唯一的。

如果来源是localhost:8000 / file://,如何确保移动应用程序和网站之间的通信?如果出于某种原因,我不能使用访问令牌来验证如下所示的任何通信?

mobile.app

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

website.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}
  • 当用户按下打印按钮时,从iframe发送带有布尔值和html字符串 的对象。 {'print':true, 'html':htmlString}
  • 将加密的有效负载发送到iframe,然后等待iframe返回对象。 {'success':true}

1 个答案:

答案 0 :(得分:0)

使用postMessage发送数据时,您可以通过在原始URL中指定https:// ...来加密通信。

使用这种过程是跨站点脚本编写的大门,您应该在Web应用程序和移动端上验证主叫方和被叫方。此处提供有关postMessage的更多规范(以及有关威胁的有用注意事项): https://developer.mozilla.org/fr/docs/Web/API/Window/postMessage

对于身份验证,您必须在传输的数据中进行身份验证(使用手机用户手动提供的内容,否则不会进行任何身份验证)。

要从cordova读取数据,您应该使用针对Web服务器上的服务的AJAX请求。