在浏览器和本机应用程序之间安全地通信


12

我正在处理仅需要从其本地安装的本机应用程序浏览器获取的数据的Web应用程序。

您如何绕过浏览器沙箱,以便可以与本机应用程序通信(安全,因为数据可能是敏感的)。

在我发现的唯一示例中,用户手动在两者之间移动了一些令牌和文件,这是我想避免的可怕的用户体验。


1
在本地应用程序包含在本地主机上运行的小型Web服务器的情况下,您也许可以使用某种解决方案。
阿蒙2015年

我也在想...我对那些不会被“关注”的不确定性含混不清。今天是否有应用程序执行此操作的示例?(将其写在答案中,您可能会得到积分)
Zak Kus 2015年

嵌入式浏览器将是最好的。将浏览器嵌入应用中,并根据需要对交互进行编程。
GregJava

Answers:


7

您可以将网络服务器嵌入本机应用程序中,然后您的客户端可以通过指向http:// localhost / xyz的硬编码链接对其进行调用(您可能要担心此处的跨站点脚本警告,和/或运行服务器)在非HTTP端口上)。如果您使用websocket,则本机应用程序甚至可以在浏览器启动通信后将数据推送到Web浏览器。

我自己在本地进行操作,一个嵌入式Web浏览器控件从自定义Web服务器请求可视化数据,并且在开发时我都在同一台PC上运行它们。

有许多用于C / C ++的微型高效的嵌入式Web服务器(Mongoose,NxWeb,civetweb等),C#倾向于使用完整的WCF服务器,python IIRC附带一个小型Web服务器。


我正在研究这样的解决方案,但是当浏览器尝试通过Websocket从Internet域(www.mydomain.com)上的网页与本地主机websocket服务器进行连接时,尤其是如果该网页与HTTPS,它要求将websocket服务器配置为使用wss(带有SSL的WebSocket)。如果您使用自签名证书来“保护” websocket服务器,那么浏览器将不会喜欢您的websocket连接。一旦您接受了不安全的本地证书,Firefox将允许它,但是其他浏览器将不允许您如此轻松地进行连接。
大卫

1
如今,对于C#来说,最好的嵌入式Web服务器可能是自托管owin。
Esben Skov Pedersen

8

您可以通过两种方式将本机应用程序和浏览器应用程序混合在一起。

您可以将浏览器嵌入本机应用程序中,就像PhoneGap应用程序在移动设备上所做的一样。这样一来,您就可以扩展浏览器的JavaScript引擎,并在两者之间进行调用。

或者,重新考虑您的体系结构。让本机应用程序和基于浏览器的应用程序都将服务器用作中介。因此,浏览器和本机应用程序都只与Web服务器通信,后者根据需要在两者之间转发信息。

或者,如果您需要本机功能...只需制作一个本机应用程序。

除了在受控环境中运行的应用程序外,我不建议将“本地Web服务器”方法用于任何其他情况。如果您的软件旨在以最低的支持要求在最终用户计算机上安装和运行,那么您将发现自己遇到了与防火墙和防病毒软件相关的大量问题。


我从本机应用程序需要的数据是关于该机器(而不是用户)是否可接受的。如果您使用普通的Web服务器作为中间设备,可以确定浏览器所在的计算机与本机应用程序评估的计算机相同。同样,完全同意,没有正当理由应该没有两个,但是我们有我们的理由^ _ ^
Zak

同样,我还不清楚将浏览器嵌入本机应用程序实际上将如何允许浏览器与本机应用程序之间进行通信
Zak Kus 2015年

就像我说的@Zak一样,您可以扩展JavaScript引擎,以允许他们像PhoneGap在移动应用程序上那样相互交谈。您将定义可由本机应用程序执行的页面上的javascript调用的方法,或从本机应用程序调用javascript函数。
GrandmasterB

我认为使用这样的嵌入式浏览器将是确保浏览器在需要运行的机器上运行的最佳方法。
GrandmasterB,2015年

从技术上讲,我同意具有Web视图的本机应用程序是最简单的方法。但是,根据来自heise在线德语文章,适用于android 4.3及更低版本的android web-viewer存在严重的安全问题,无法解决
k3b 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.