amo*_*l01 6 cordova content-security-policy
我已经为我的Cordova应用程序定义了我的内容安全策略已经困难了几天.
我的第一个问题是:我是否必须在Cordova中添加CSP?似乎Cordova默认为CSP添加了元标记,并添加了Whitelist插件,需要为每个页面定义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 *">
Run Code Online (Sandbox Code Playgroud)
我想知道如何为script-src,style-src,media-src,img-src正确添加CSP.我已经阅读了W3C草案.但无法弄清楚.
我也必须在Cordova方面做点什么吗?
最好,
简答:不,您不必在Cordova中添加CSP.我的特定问题在config.xml中的访问源属性中显然缺乏对子域通配符的支持.请改用subdomains ="true"(见下文).
更新:您应该将CSP标签添加到您的HTML ...请参阅底部的注释...
详细信息: 我一直在搞乱这个问题,最后在查看白名单插件本身的源代码时找到了解决方案.
我注意到插件检查了config.xml文件中包含的行
<access origin="*" />
Run Code Online (Sandbox Code Playgroud)
并且在那种情况下添加了白名单条目(java代码):
if ("*".equals(origin)) {
allowedRequests.addWhiteListEntry("http://*/*", false);
allowedRequests.addWhiteListEntry("https://*/*", false);
} else {
allowedRequests.addWhiteListEntry(origin, (subdomains != null) && (subdomains.compareToIgnoreCase("true") == 0));
}
Run Code Online (Sandbox Code Playgroud)
表明它根据在config.xml中找到的内容创建CSP规则.
我添加<access origin="" />到我的config.xml,事情开始工作!
然后我在上面的java片段中注意到,如果原点不是"*",则插件的源代码将简单地复制给定的原点,并且还需要注意"子域"属性.
我在config.xml中查看了以前工作的访问定义:
<access origin="http://my.domain.com/*" />
Run Code Online (Sandbox Code Playgroud)
我更改了所有这些以使用子域属性而不是通配符:
<access origin="http://my.domain.com" subdomains="true" />
Run Code Online (Sandbox Code Playgroud)
然后我<access origin="*" />从之前删除了一行,一切都继续工作.
我也回到了我的html文件并删除了<meta http-equiv="Content-Security-Policy" ... > 我一直在试验的标签,并且事情继续发挥作用..即.他们不需要 ......插件可以做到这一切.我应该注意到我的HTML中的上述CSP标签确实有一些效果,但我无法让它们为我的XMLHttpl请求工作.我的平台是Android.Cordova -v = 5.0.0(我从av 3.xx升级)
您可能希望查看插件源的其余部分,因为它可能已更改或提示如何处理其他问题,例如<allow-navigation href="*" />在config.xml中导致CSP如上(即"http://*/*"和"https://*/*")以及"data:*".
刚刚注意到:
当运行cordova应用程序时,我从白名单插件收到警告:
未找到Content-Security-Policy元标记.使用cordova-plugin-whitelist插件时请添加一个
我认为这个插件打开了所有内容,你应该在你的html文件中使用CSP成为一个负责任和安全的编码器 - 会这样做!;)
我注意到,在你的问题的第二部分,你似乎试图将CSP打开......所以我的答案到目前为止应该足以让事情顺利进行.就CSP标签的正确应用而言,我和你在同一条船上......并且会查看在线资源以找出它.我想谷歌和苹果可能在未来的某个时候需要适当的CSP标签.
小智 5
在Content Security Police 标签的content属性中,您定义每个源类型允许的 url:
例如,在script-src 中,您添加允许加载脚本源的 url,这样的值'unsafe-inline'意味着您不能在您的应用程序上使用内联 javascript 代码。
有了这个*值,你就允许你的应用从任何 url 加载源。
该self值意味着您的应用程序可以加载本地资源,例如
<script src='../js/script.js'></script>
语法就像
script-src 'self' http://test.com/* http://hello.com/* 'unsafe-inline'; style-src 'self' http://hellocom/*
| 归档时间: |
|
| 查看次数: |
9558 次 |
| 最近记录: |