Cordova 5:白名单阻止ajax调用

时间:2016-02-24 12:05:27

标签: android ajax cordova content-security-policy whitelist

我正在将一些项目从旧的Cordova版本2.x和3.x升级到最新版本5.1。 我被迫这样做是因为Google Play将在5月份收集4.1.1之前的Cordova应用程序(没有新的提交,也没有现有应用的更新)。

我正在升级的旧项目已在白名单中允许所有网址。我在WebView中加载的页面包含在apk资产中,但对于对某些远程资源URL进行ajax调用的操作至关重要。这些资源由客户公司在各种领域发布,因为有数千个白名单是不切实际的。

现在有了Cordova> 4你必须下载whitelist plugin,无论你喜不喜欢。 在新的config.xml文件中,我有:

<allow-navigation href="*" />
<allow-intent href="*" />
<access origin="*" />

但这似乎不够。在logcat中有一些关于必须修改我的HTML以包含Content Security Policy的警告。

所以我把它添加到我的页面:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">

现在我遇到了问题,因为旧版应用程序与JellyBean设备兼容,但白名单插件CSP功能仅在KitKat设备中受支持。
不过我已经在Lollipop设备中测试了升级的应用程序,并且ajax调用一直被阻止。

有没有办法在不使用CSP的情况下将所有可能的域列入白名单,以便我可以在JellyBean中运行我的应用程序?

如果没有,什么是限制最少的内容安全警察?显然,通配符不起作用。

2 个答案:

答案 0 :(得分:0)

这个通配符在元标记中为我工作,尝试一下。

<meta http-equiv="Content-Security-Policy" content="img-src 'self' data:; default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">

我在config.xml文件中和你一样,所以这应该有效

答案 1 :(得分:0)

我自己就找到了答案。

是的,可以在不使用CSP功能的情况下将白名单列入白名单。只需将这些通配符添加到res/xml/config.xml文件即可:

<allow-navigation href="*" />
<access origin="*" />

我的问题不同了。白名单插件的js和java文件存在,但是当将配置文件升级到新格式时,我忘了添加它的功能:

<feature name="Whitelist">
    <param name="android-package" value="org.apache.cordova.whitelist.WhitelistPlugin" />
    <param name="onload" value="true" />
</feature>

全部注意此答案不适用于CLI。此上下文中的<feature>适用于SDK和使用IDE的用户。请参阅文档The feature Element
引用:

  

如果使用CLI构建应用程序,则使用plugin命令启用设备API。这不会修改顶级config.xml文件,因此<feature>元素不适用于您的工作流程。

     

如果您直接在SDK中工作并使用特定于平台的config.xml文件作为源,则可以使用<feature>标记来启用设备级API和外部插件。它们通常在特定于平台的config.xml文件中显示自定义值。