在Cordova上保护postMessage()

JM-*_*GMS 14 iframe postmessage cordova

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

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

移动应用

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

website.com

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

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

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

小智 0

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

使用这种程序是跨站点脚本的大门,您应该在 Web 应用程序和移动端验证调用者和被调用者。有关 postMessage 的更多规范(以及有关威胁的有用考虑因素): https: //developer.mozilla.org/fr/docs/Web/API/Window/postMessage

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

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