离子应用程序中不受信任的节点代码 – 如何为我自己的应用程序定义和执行防火墙规则?

我有什么select可以更精细地控制一个应用程序的互联网访问,我正在开发?

我们正在开发一个离子应用程序,因此依赖于许多节点模块,这本身就是不可信的代码(参见HN讨论) 。 由于内容是明智的,我想安全地防止不可信任的以不希望的方式发送任何数据的可能性。

对于我的应用程序的function,它只需要谈谈一个单一的IP,但是我找不到一个方法来声明android或iOS的清单来声明:只允许与单个IP /域的域交谈。

有没有办法阻止(不受信任的代码)我自己的应用程序从/到其他地方说话? 优选地,安装应用程序的用户不应该关心任何附加的步骤。

  1. 最好是Android或iOs平台将允许在声明中声明我想限制互联网访问。 我看到一个可以定义自定义权限和意图,但在我的理解,本身并不允许我定义受限制的互联网访问。 我可以声明性地将我拥有的应用程序互联网访问权限限制在清单中的特定主机上吗?
  2. 如果没有,我需要的是一个应用程序防火墙。 通常情况下,会安装防火墙并为该应用程序设置防火墙规则。 但是,我不能要求应用程序用户安装和设置防火墙。 有没有办法在应用程序安装过程中使用一些脚本直接设置iftables规则?
  3. 如果没有,基于cordova为基础,我的应用程序与他们自己的浏览器和JS运行时。 我正在考虑故意瘫痪的节点,这样的socket.connect忽略参数,只是连接到所需的硬编码域,发送数据,只有打开套接字到给定的IP? 然而,这需要我改变c / c + +,我不是一个专家。是否有一个简单和干净的方法来做到这一点?

感谢您的提示!


       

网上收集的解决方案 "离子应用程序中不受信任的节点代码 – 如何为我自己的应用程序定义和执行防火墙规则?"

在了解您的问题后,我build议您使用Cordova的白名单域function。

特定于平台的白名单规则可在res / xml / config.xml中find。

您需要更改应用程序的config.xml文件中的<access>元素以启用或限制对特定域的networking访问。

默认情况下,它是<access origin="*" /> ,这意味着你的应用程序可以访问所有域。

现在让我们假设你想要你的应用与之通信的IP地址是192.168.10.1,那么访问元素应该被修改为

 <access origin="192.168.10.1" /> 

它会限制你的应用程序与除192.168.10.1以外的所有IP地址的通信

此外,在Android和iOS上,networking请求白名单(请参阅上文)无法过滤所有types的请求(例如<video> &WebSockets未被阻止)。 因此,除了白名单之外,您还需要在HTML文件中实施Content-Security-Policy元标记以降低XSS的风险。

这使您可以定义可以从哪里加载资源,防止Web视图从任何其他位置加载数据。 这使攻击者难以将恶意代码注入到您的网站。

如果您有一个主文件(即index.html),并且所有其他页面都加载在该主文件中,则只需在该主文件中定义上述元标记,否则必须在所有HTML中编写CSP元标记文件。

要详细了解如何使用CSP元标记,请点击下面的链接

内容安全政策如何运作?

我也build议你阅读cordova的官方文件:

https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-whitelist/