2017-03-17 43 views
6

我们有一个为客户提供多种白标签解决方案的应用程序 - 这意味着它们托管在他们自己的域中。如何动态更改科尔多瓦白名单?

我们有一个科尔多瓦应用程序,我们希望用户可以使用此应用程序访问所有这些网站,但是我不想每次我们签署新客户时都要重新部署。

  • 有没有办法通过url或其他方式加载白名单?这意味着我们可以通过我们的数据库即时添加域名。
  • 当您将所有网址列入白名单时,是否存在巨大的安全风险?

https://cordova.apache.org/docs/en/latest/guide/appdev/whitelist/

为了澄清,我很想有像一个网址,它加载每次启动时的白名单设置,您可以指向。

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)科尔多瓦插件来做到这一点安全?与我们尝试加载的网址在白名单外部时手动重定向一样?

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

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

+0

我不认为有一个简单的方法。我能想到的一种方法是将允许导航设置为*通配符,并将所有请求路由到服务器端,以处理过滤器中的请求过滤并重定向到相应的URL – Gandhi

+0

Dirk,您的目标平台是什么? ?如果包含iOS,恐怕没有什么可以轻松做到的。这是因为根据文档白名单似乎使用[NSAppTransportSecurity](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33),其中转到编译的应用程序(包)的属性文件。并且该配置由iOS/Apple的网络框架本身处理,因此您无法“实时”更改它。所以你的自定义插件可能是唯一的方法。 – SergGr

回答

1

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

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

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

不知道更多关于您的服务如何工作,很难提供更多的帮助,但我会建议为每个客户端建立一个单独的应用程序。您可以创建脚本来自动执行(几乎)所有操作,以便将更新发布到客户端并不麻烦。

+0

Hi @Kerri Shotts,谢谢你的回答。为什么数据库支持白名单会破坏安全性?这是不是意味着我们的数据库已经被破坏 - 而且我们有更大的问题?我们的应用程序并非真正的关键应用程序 - 它是预测游戏的平台(用于娱乐)。 我们是一个*真的*小团队,所以为每个用户发布一个应用程序不是我们的选择。我想知道我们是否可以自己写一个插件,或者为此编写一个插件。 –

1

下面是我在这里的经历一对夫妇更多的选择:

  1. 打开与InAppBrowser插件和“_SYSTEM”目标URL。这应该在本地浏览器中打开URL,并在全视图中显示该URL。这似乎允许没有白名单调整。

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