【问题标题】:Cordova Content Security PolicyCordova 内容安全政策
【发布时间】:2015-07-22 06:02:23
【问题描述】:

我有一个 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"

有什么想法可以尝试吗?

【问题讨论】:

    标签: cordova ionic-framework azure-mobile-services visual-studio-cordova content-security-policy


    【解决方案1】:

    接受通配符,但只能作为方案、端口或主机名最左边的位置:

    *://*.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”替换为 *

    希望这会有所帮助,或引导您走向正确的方向。

    【讨论】:

    • 嗨!感谢您查看这个。您的回答没有解决问题,但我解决了删除和添加插件的问题。
    • 看了这么多例子,这是唯一有效的例子。干杯!
    • 谢谢,它适用于我的科尔多瓦项目。我用这个 localhost:1337 ajax.aspnetcdn.com">
    • 太好了,当我将 url(host+port+context) 放入标签元中时,它也对我有用!!!
    • 在尝试使用通配符作为方案时,Chrome 调试器中出现“无效源”错误,即*://192.168.2.2
    【解决方案2】:

    我的插件/平台似乎有问题。

    我删除了所有插件

       cordova platform rm android
       cordova platform add android
    

    然后读取插件,一切正常。

    【讨论】:

    • Cordova 5.0 似乎发生了很大变化。特别是对于 Android,他们已经完全切换到基于 gradle 的构建,而不是 ANT。我遇到了一些不再编译的 3rd 方插件,它们引用了不存在的函数调用。
    【解决方案3】:

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

    为安卓安装“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 不再需要这个插件!!

    【讨论】:

    • 不是相反吗? >= v4 确实需要它吗?
    猜你喜欢
    • 2019-04-15
    • 2016-10-03
    • 2017-04-24
    • 2020-12-29
    • 2016-07-19
    • 2015-01-26
    • 2015-09-05
    • 2021-09-29
    相关资源
    最近更新 更多