cordova - 如何在 Cordova 中正确定义 Content-Security-Policy?

标签 cordova content-security-policy

我已经为我的 Cordova 应用程序定义内容安全策略而苦苦挣扎了几天。

我的第一个问题是:我是否必须在 Cordova 中添加 CSP?似乎 Cordova 默认为 CSP 添加元标记并添加白名单插件,需要为每个页面定义您的 CSP。

如果我必须定义:

如何根据我的需要正确定义指令:

我正在添加一些 js 文件、css 文件,并具有内联 js 代码以及样式。我已经为我的页面添加了这个 CSP。它正在提示 style-src .

<meta http-equiv="Content-Security-Policy" content="default-src *; script-src 'self' 'nonce-Random'; connect-src 'self'; img-src *; style-src *; media-src *"> 

我想知道如何为 script-src、style-src、media-src、img-src 正确添加 CSP。我已经阅读了 W3C 草案。却想不通。

我也必须在 Cordova 方面做些什么吗?

最好的事物,

最佳答案

简答:不,您不必在 Cordova 中添加 CSP。
我的特殊问题原来是明显缺乏对 config.xml 中访问源属性中的子域通配符的支持。使用 subdomains="true"代替(见下文)。

Update: You should add CSP tags to your html... see note at the bottom...



详情:
我也一直在纠结这个问题,最后在查看白名单插件的源代码时找到了解决方案itself .

我注意到插件检查了 config.xml 文件中包含的行
<access origin="*" />

在这种情况下,添加了一个白名单条目(java代码):
if ("*".equals(origin)) {
    allowedRequests.addWhiteListEntry("http://*/*", false);
    allowedRequests.addWhiteListEntry("https://*/*", false);
} else {
    allowedRequests.addWhiteListEntry(origin, (subdomains != null) && (subdomains.compareToIgnoreCase("true") == 0));
}

表明它根据在 config.xml 中找到的内容创建 CSP 规则。

我添加了 <access origin="" />到我的 config.xml 并且开始工作了!

然后我在上面的 java 代码片段中注意到,在源不是“*”的情况下,插件的源代码将简单地复制给定的源,并且它也会注意“子域”属性。

我在 config.xml 中查看了我以前工作的访问定义:
<access origin="http://my.domain.com/*" />

我更改了所有这些以使用子域属性 而不是通配符:
<access origin="http://my.domain.com" subdomains="true" />

然后我删除了 <access origin="*" />之前的线路,一切都继续工作。

我也回到了我的 html 文件和 已移除 <meta http-equiv="Content-Security-Policy" ... >我一直在试验的标签,事情继续有效......即。 不需要它们 ...插件完成了这一切。
我应该注意到我的 HTML 中前面提到的 CSP 标签确实有一些效果,但我无法让它们为我的 XMLHttpl 请求工作。
我的平台是安卓。
Cordova -v = 5.0.0(我是从 v 3.x.x 升级的)

您可能需要查看插件源的其余部分,因为它可能已更改或提示如何处理其他问题,例如<allow-navigation href="*" />在 config.xml 中,导致上述 CSP(即 "http://*/*""https://*/*")以及 "data:*" .

刚刚注意到 :

运行cordova应用程序时,我从白名单插件收到警告:

No Content-Security-Policy meta tag found. Please add one when using the cordova-plugin-whitelist plugin



我认为这意味着插件打开了一切,你应该在你的 html 文件中使用 CSP 来成为一个负责任和安全的编码器 - 会的! ;)

我注意到在您问题的第二部分中,您似乎试图将 CSP 设置为完全开放......所以到目前为止我的回答应该足以让事情顺利进行。至于 CSP 标签的正确应用,我和你在同一条船上......并且将查看在线资源来弄清楚。我想谷歌和苹果在 future 的某个时候可能需要适当的 CSP 标签。

关于cordova - 如何在 Cordova 中正确定义 Content-Security-Policy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30935021/

相关文章:

android - 尝试读取 PhoneGap 中的 NFC NDEF 负载

ios - 英特尔 XDK 更改 info.plist

content-security-policy - 为什么在严格的 CSP 下 "script.text = ..."不被认为是不安全的?

cordova - 内容安全策略 'default-src * data:;' 是通过文档 <head> 外部的 &lt;meta&gt; 元素传递的

javascript - Cordova ( ionic ): Splashscreen only works one time on Android

jquery - 使用 Cordova jquery ajax 调用未获得 401 授权,Upto Phonegap 1.4 工作正常

html - Firefox iframe 中的 CSP header 在具有动态内容的整个页面上工作

javascript - 无操作的 HTML 表单(+ CSP 规则无内联 javascript)

database - 使用 TypeORM Cordova 数据库将图像保存为 Blob

firefox - Firefox 中出现奇怪的 CSP 错误