科尔多瓦内容安全策略

16

我有一个 Cordova 应用程序,在升级(5.0.0)后,我无法调用任何资源。我已经添加了白名单插件,并在 index.html 中添加了以下标记。

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.azure-mobile.net localhost:1337 *.ajax.aspnetcdn.com">

我遇到了以下错误:

拒绝加载脚本 'http://ajax.aspnetcdn.com/ajax/mobileservices/MobileServices.Web-1.2.5.min.js',因为它违反了以下内容安全策略指令:“script-src 'self' 'unsafe-inline' 'unsafe-eval' *.azure-mobile.net localhost:1337 *.ajax.aspnetcdn.com”。

拒绝加载脚本 'http://localhost:1337/vorlon.js',因为它违反了以下内容安全策略指令:“script-src 'self' 'unsafe-inline' 'unsafe-eval' *.azure-mobile.net localhost:1337 *.ajax.aspnetcdn.com”。

我已经尝试了默认策略,应该允许一切,但还是没有成功。

我还在我的config.xml文件中添加了以下内容

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

并使用以下插件:

C:\Projects\TavlaApp>cordova plugin
com.microsoft.azure-mobile-services 1.2.7 "Windows Azure Mobile Services"
cordova-plugin-whitelist 1.0.1-dev "Whitelist"
nl.x-services.plugins.calendar 4.3.4 "Calendar"
nl.x-services.plugins.insomnia 4.0.1 "Insomnia (prevent screen sleep)"
org.apache.cordova.inappbrowser 0.6.0 "InAppBrowser"

有什么想尝试的主意吗?

3个回答

30

通配符被接受,但仅作为方案、端口或主机名的最左侧位置。

*://*.example.com:* 

...这将匹配example.com的所有子域名(但不包括example.com本身),使用任何协议,在任何端口上。

对你来说,关键在于上面粗体部分。

您正在指定:

localhost:1337

*.ajax.aspnetcdn.com

但是仍然需要调用。
http://ajax.aspnetcdn.com

http://localhost:1337

可能更改为

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.azure-mobile.net http://localhost:1337 http://ajax.aspnetcdn.com">

我正在指定端口,但你可以用*替换"http"

希望这能帮到你,或者引导你朝着正确的方向前进。


嗨!感谢您关注此事。您的答案没有解决问题,但是我已经通过移除和添加插件来解决了它。 - Larsi
看了这么多例子,只有这一个起作用了...干杯! - fabriek-huis
谢谢,它在我的 Cordova 项目中有效。我用这个替换了我的 HTML 文件中的 meta 标签:<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.azure-mobile.net http://localhost:1337 http://ajax.aspnetcdn.com"> - Emmy
太棒了,当我把URL(主机+端口+上下文)放在meta标签中时,它也对我起作用了!!! - linhadiretalipe
当我尝试使用通配符作为方案(即 *://192.168.2.2)时,在Chrome调试器中出现了“无效来源”错误。 - JoshuaDavid
我确认了我的错误 - 你不能在方案中使用通配符。在这里查看规范 - JoshuaDavid

7

看起来我的插件/平台出了一些问题。

我删除了所有的插件。

   cordova platform rm android
   cordova platform add android

然后重新添加插件,一切正常。

Cordova 5.0 看起来改变了很多。特别是对于 Android,他们已经完全转向基于 Gradle 的构建方式,而不是 ANT。我遇到了一些第三方插件无法编译,引用了不存在的函数调用。 - mix3d

-4

我在尝试为 Cordova 5 安装 cordova-plugins-whitelist 时遇到了问题。以下是安装日志:

正在为 Android 安装 "cordova-plugin-whitelist"

This plugin is only applicable for versions of cordova-android greater than 4.0. If you have a previous platform version, you do *not* need this plugin since the whitelist will be built in.

正如我们所看到的,这个插件在Cordova v5中已经不再必要了!


10
相反的吗?你需要它来支持v4及以上版本吗? - ABCD.ca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接