7

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

我们有一个 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 列入白名单并使用我们自己的插件来阻止我们自己的白名单之外的所有内容。

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

4

2 回答 2

1

根据我的经验,这里有更多选择:

  1. 使用 InAppBrowser 插件和“_system”目标打开 URL。这应该会在本机浏览器中打开 URL,并显示完整的 URL。这似乎是允许的,无需白名单调整。

    window.open(url, '_system', 'location=yes,enableViewportScale=yes');
    
  2. 如果您需要留在您的应用程序中(而不是打开本机浏览器),您可以做一个 hacky 变通方法,在其中加载您控制和信任的页面,并将动态 URL 传递给它。然后,在该页面上,您可以iframe根据传入的参数动态更改其源。该应用程序可以通过查询字符串传入所需的 URL,然后从那里更改 iframe。
    显然,最好将您允许的 URL 限制在您控制的列表中。

于 2017-12-19T19:16:31.133 回答
1

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

将所有内容列入白名单的安全风险非常高,尤其是在您加载不属于您的网站时。将这些站点加载到您的应用程序的主框架中,它们可以访问您的应用程序可以访问的同一个 Cordova 桥 - 这意味着这些页面可以使用您的应用程序中安装的相同插件。(注意:在应用内浏览器或外部打开这些链接不会有相同的风险,因为这不提供对 Cordova 桥的访问。)

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

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

于 2017-03-17T17:50:46.073 回答