PhoneGap访问源限制不起作用

时间:2014-01-02 12:58:29

标签: ios cordova

我正在使用Cordova 3.3.0开发iOS应用。在我的config.xml中,我有以下内容:

<access origin="https://*.kidsintouch.com" />

理论上,这应该会阻止我的应用访问尝试在该域外加载的任何资源。

但是,当我在模拟器中或通过Xcode在设备上运行应用程序时,我可以从任何域访问图像。

PhoneGap文档说:

  

与上面提到的Android平台不同,在iOS上通过href超链接导航到非白名单网域会阻止页面打开。

但是,我仍然可以在应用程序的页面上放置一个外部链接并单击它。

当我在Xcode中运行应用程序时,我看到以下控制台输出:

2014-01-02 06:47:16.469 Kids In Touch[10454:60b] Multi-tasking -> Device: YES, App: YES 2014-01-02 06:47:16.480 Kids In Touch[10454:60b] Unlimited access to network resources 2014-01-02 06:47:17.276 Kids In Touch[10454:60b] Resetting plugins due to page load. 2014-01-02 06:47:18.157 Kids In Touch[10454:60b] Finished load of: file:///var/mobile/Applications/8DBB3EE2-A33D-4523-A51F-B72AJ21E5338/Kids%20In%20Touch.app/www/index.html#/intro 2014-01-02 06:47:19.629 Kids In Touch[10454:60b] Resetting plugins due to page load.

Unlimited access to network resources清楚地表明出现了问题。当我点击Google的虚假链接时,我放入应用程序,控制台显示:

2014-01-02 06:47:20.755 Kids In Touch[10454:60b] Finished load of: https://www.google.com/

很明显,我的access origin限制实际上并没有限制任何内容。

我做错了吗?如何阻止我的应用访问我提供的域外的任何资源?

由于

2 个答案:

答案 0 :(得分:7)

我发现了这个问题。出于某种原因,cordova build ios生成的config.xml文件与我在www文件夹中生成的文件不同。

似乎有一些默认信息,然后www/config.xml附加了我的真实信息。默认配置信息的顶部是<access origin="*" />

因此,该应用程序允许所有访问。

我尝试通过运行cordova platform remove ios然后重新运行cordova build ios来彻底清除现有的config.xml。这没用。每次构建时,都会在我的真实config.xml之前添加一些默认内容。

现在解决,直到我深入挖掘是在每次构建后手动编辑config.xml。当我这样做并尝试访问未配置access origin的域时,我得到:

ERROR whitelist rejection: url='http://0.0.0.0:8080/accounts'

因此,白名单工作正常,但我有一个不稳定的构建过程需要解决。

更新:有一个文件platforms/ios/cordova/defaults.xml,其中包含XML文件的默认设置。它中包含access origin *。我删除了那个和其他一些设置,现在可以正确地构建我的www文件夹中的config.xml。

一切都很好。很遗憾,这些默认值会被放入我的最终config.xml中。

答案 1 :(得分:0)

我也遇到了这个问题。作为删除默认值的替代方法,您可以确保将标记放在config.xml中的标记之后。