我们的应用程序为客户提供了多个白标解决方案 - 这意味着它们在自己的域下托管。
我们有一个Cordova应用程序,我们希望用户可以使用此应用程序访问所有这些网站但我不想在每次签署新客户时重新部署。
https://cordova.apache.org/docs/en/latest/guide/appdev/whitelist/
示例
为了澄清,我希望有一个类似URL的东西,你可以指出它在启动时每次加载的白名单设置。
http://myexampledomain.com/whitelist.config
<allow-navigation href="*.myexampledomain.com/*" />
<allow-navigation href="*.subdomain.someclientdomain.com/*" />
<allow-navigation href="*.subdomain.someclientdomainb.com/" />
<allow-navigation href="*.subdomain.someclientdomainc.com/" />
...此文件将在启动时自动加载。
创建基于JS的插件
如果当前没有解决方案,是否可以通过创建基于(基于JavaScript)的Cordova插件来执行此操作 safe ?就像我们尝试加载的URL在白名单之外时手动重定向一样?
这意味着我们将Cordova列入白名单并使用我们自己的插件来阻止我们自己的白名单之外的所有内容。
(我知道当我们的数据库被泄露时这不安全,但在这种情况下,我们一般会遇到更大的问题。我们的应用程序很有趣,不依赖于关键功能)
答案 0 :(得分:1)
一旦构建,就没有动态更新应用白名单的机制。这在很大程度上会破坏提供白名单的安全性。
将所有内容列入白名单的安全风险非常高,特别是如果您要加载您不拥有的网站。将这些网站加载到您应用的主框架中,可以访问您的应用可以访问的同一个Cordova网桥 - 这意味着这些网页可以使用您应用中安装的相同插件。 (注意:在In App Browser中打开这些链接或在外部不会共享相同的风险,因为它不能提供对Cordova网桥的访问。)
旁注:即使您使用自己拥有的网站,风险也很高:如果MITM攻击成功执行,或者您的后端攻击恶意内容可以提供给最终用户。
如果不了解您的服务如何运作,很难提供更多帮助,但我建议为每个客户构建一个单独的应用程序。您可以创建自动(几乎)所有内容的脚本,以便向客户发布更新并不繁琐。
答案 1 :(得分:1)
根据我的经验,这里有几个选项:
使用InAppBrowser插件和&#39; _system&#39;打开网址。目标。这应该在本机浏览器中打开URL,并在完整视图中显示URL。这似乎是允许的,没有白名单调整。
window.open(url, '_system', 'location=yes,enableViewportScale=yes');
如果您需要留在您的应用程序中(而不是打开本机浏览器),您可以在加载您控制和信任的页面时执行hacky解决方法,并将其传递给动态URL。在该页面上,您可以拥有iframe
,其源根据传入的参数动态更改。应用程序可以通过查询字符串传递所需的URL,然后只需从那里更改iframe
显然,将您允许的网址限制在您控制的列表中是很好的。