在我的系统中更新Cordova 5.0后,我创建了新的应用程序。当我在设备上测试我的应用程序时,我在控制台日志中出现错误:
No Content-Security-Policy meta tag found.
Please add one when using the Cordova-plugin-whitelist plugin.: 23.
我在头部添加meta
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src: 'self' 'unsafe-inline' 'unsafe-eval'>
但是,在我使用应用程序内浏览器插件和其他7个网站链接的应用程序中,我得到了同样的错误。
答案 0 :(得分:86)
添加cordova-plugin-whitelist后,您必须告知您的应用程序允许访问所有网页链接或特定链接,如果您想保持其特定。
您只需将其添加到 config.xml 即可在应用程序的根目录中找到:
文档中的推荐:
<allow-navigation href="http://example.com/*" />
或:
<allow-navigation href="http://*/*" />
从插件的文档:
导航白名单
控制可以导航到WebView本身的URL。适用于 仅限顶级导航。
Quirks:在Android上它也适用于非http(s)方案的iframe。
默认情况下,仅允许导航到file:// URL。允许 其他其他网址,您必须添加标签 config.xml中:
<!-- Allow links to example.com --> <allow-navigation href="http://example.com/*" /> <!-- Wildcards are allowed for the protocol, as a prefix to the host, or as a suffix to the path --> <allow-navigation href="*://*.example.com/*" /> <!-- A wildcard can be used to whitelist the entire network, over HTTP and HTTPS. *NOT RECOMMENDED* --> <allow-navigation href="*" /> <!-- The above is equivalent to these three declarations --> <allow-navigation href="http://*/*" /> <allow-navigation href="https://*/*" /> <allow-navigation href="data:*" />
答案 1 :(得分:37)
您必须在应用的index.html
根据https://github.com/apache/cordova-plugin-whitelist#content-security-policy
内容安全政策
控制允许进行哪些网络请求(图像,XHR等)(直接通过webview)。
在Android和iOS上,网络请求白名单(见上文)不是 能够过滤所有类型的请求(例如
<video>
和WebSockets 没有阻止)。所以,除了白名单,你应该使用 Content Security Policy 所有网页上都有<meta>
标记。在Android上,系统webview中对CSP的支持始于 KitKat(但在使用Crosswalk WebView的所有版本上都可用)。
以下是
.html
页面的一些示例CSP声明:<!-- Good default declaration: * gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly * Disables use of eval() and inline scripts in order to mitigate risk of XSS vulnerabilities. To change this: * Enable inline JS: add 'unsafe-inline' to default-src * Enable eval(): add 'unsafe-eval' to default-src --> <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *"> <!-- Allow requests to foo.com --> <meta http-equiv="Content-Security-Policy" content="default-src 'self' foo.com"> <!-- Enable all requests, inline styles, and eval() --> <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"> <!-- Allow XHRs via https only --> <meta http-equiv="Content-Security-Policy" content="default-src 'self' https:"> <!-- Allow iframe to https://cordova.apache.org/ --> <meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://cordova.apache.org">
答案 2 :(得分:23)
您的元标记中存在错误。
此致:
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src: 'self' 'unsafe-inline' 'unsafe-eval'>
修正:
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"/>
注意&#34; script-src&#34;之后的冒号,以及元标记的结尾双引号。
答案 3 :(得分:2)
对我而言,重新安装白名单插件就足够了:
cordova plugin add cordova-plugin-whitelist
然后
ENV AWSKEY @value@
看起来从早期版本的Cordova更新并不成功。
答案 4 :(得分:1)
对我来说问题是我使用的是cordova android 和 ios 平台的过时版本。升级到 android@5.1.1 和 ios@4.0.1 解决了它。
您可以升级到以下特定版本:
cordova platforms rm android
cordova platforms add android@5.1.1
cordova platforms rm ios
cordova platforms add ios@4.0.1
答案 5 :(得分:0)
还有另一个关于连接的问题。某些android版本可以连接,但有些则不能。因此,还有另一种解决方案
在AndroidManifest.xml中:
<application ... android:usesCleartextTraffic="true">
...
</application>
只需添加'android:usesCleartextTraffic =“ true”'
问题终于解决了。