我已经为我的 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/