我正在使用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
限制实际上并没有限制任何内容。
我做错了吗?如何阻止我的应用访问我提供的域外的任何资源?
由于
答案 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中的标记之后。