如何动态更改Cordova白名单?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何动态更改Cordova白名单?相关的知识,希望对你有一定的参考价值。

我们有一个应用程序,为客户端提供多个白标解决方案 - 这意味着它们在自己的域下托管。

我们有一个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插件来实现这一目标?就像我们尝试加载的URL在白名单之外时手动重定向一样?

这意味着我们将Cordova列入白名单并使用我们自己的插件来阻止我们自己的白名单之外的所有内容。

(我知道当我们的数据库被泄露时这不安全,但在这种情况下,我们一般会遇到更大的问题。我们的应用程序是为了好玩而不依赖于关键功能)

答案

一旦构建,就没有动态更新应用程序白名单的机制。这在很大程度上会破坏首先提供白名单的安全性。

将所有内容列入白名单的安全风险非常高,特别是如果您要加载您不拥有的网站。将这些网站加载到您应用的主框架中,可以访问您的应用可以访问的同一个Cordova网桥 - 这意味着这些网页可以使用您应用中安装的相同插件。 (注意:在In App Browser中打开这些链接或在外部不会共享相同的风险,因为这不提供对Cordova网桥的访问。)

旁注:即使您使用自己拥有的网站,风险也很高:如果MITM攻击成功执行,或者您的后端攻击恶意内容可以提供给最终用户。

如果不了解您的服务如何运作,很难提供更多帮助,但我建议为每个客户构建一个单独的应用程序。您可以创建自动(几乎)所有内容的脚本,以便向客户端发布更新并不繁琐。

另一答案

根据我的经验,这里有几个选项:

  1. 使用InAppBrowser插件和“_system”目标打开URL。这应该在本机浏览器中打开URL,并在完整视图中显示URL。这似乎是允许的,没有白名单调整。 window.open(url, '_system', 'location=yes,enableViewportScale=yes');
  2. 如果您需要留在您的应用程序中(而不是打开本机浏览器),您可以在加载您控制和信任的页面时执行hacky解决方法,并将其传递给动态URL。在那个页面上你可以有一个iframe,它的源根据传入的参数动态改变。应用程序可以通过查询字符串传递所需的URL,然后只需从那里更改iframe。 显然,将您允许的URL限制为您控制的列表是很好的。

以上是关于如何动态更改Cordova白名单?的主要内容,如果未能解决你的问题,请参考以下文章

Cordova 应用程序的 API 服务器 CORS 白名单

带有 Phonegap Build 的 Cordova 插件白名单在 iOS 上不起作用

W/SystemWebViewClient:被白名单阻止的 URL

在运行时使用phonegap将url添加到iphone中cordova.plist文件中的白名单

Cordova Android 不允许向 fb-messenger 打开列入白名单的意图

cordova Refused to connect to xxxxx -- 白名单拒绝发送网络请求