尝试从api获取json数据时的Cordova安全策略

时间:2017-07-28 21:13:23

标签: javascript jquery json api cordova

jquery-1.11.1.min.js:4 Refused to connect to 
'https://xxxxxxxx/v1/common/introductions/faqs' because it 
violates the following Content Security Policy directive: "default-src 
'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'". Note that 
'connect-src' was not explicitly set, so 'default-src' is used as a 
 fallback.

这是我为我的cordova app执行此jquery时遇到的错误

$(document).ready(function(){


        $("#FAQS").html("Hello worldss!");
        alert("rajesh");
        $.getJSON("https://xxxxxxxxx/v1/common/introductions/faqs",
        function(result)
        {
            $("#FAQS").html(result['faq'][0]);
            alert("hi");
        })

   });

以下是我的index.html中的安全政策

<meta http-equiv="Content-Security-Policy" content="default-src 'self' 
data: gap: https://ssl.gstatic.com 'unsafe-eval'; connect-src 'self' 
https://xxxxxxxx/v1/common/introductions/faqs; style-src 'self' 
'unsafe-inline'; media-src *">

我在堆栈溢出中遇到了很多问题 Cordova - Refused to connect to api from device (Content Security Policy)

但无法显示我的json数据并显示相同的错误

2 个答案:

答案 0 :(得分:3)

查看以下example from html5rocks

如果您想将https://apis.google.com/js/plusone.js中的代码列入白名单,则必须将源主机的名称添加到您的CSP中

script-src 'self' https://apis.google.com

因此,要允许访问https://xxxxxxxx/v1/common/introductions/faqs,您必须将对应的主机名称添加到您的CSP中:

connect-src 'self' https://xxxxxxxx

完整的CSP可能如下所示:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' 
data: gap: https://ssl.gstatic.com 'unsafe-eval'; connect-src 'self' 
https://xxxxxxxx; style-src 'self' 
'unsafe-inline'; media-src *">

另请参阅connect-src指令中的Mozilla's documentation。它明确说明了主机源的外观:

  

通过名称或IP地址访问Internet主机,以及可选的URL方案和/或端口号。该网站的地址可能包含一个可选的地址   领先的通配符(星号字符,&#39; *&#39;),您可以使用   通配符(再次,&#39; *&#39;)作为端口号,表示所有合法   端口对源有效。

答案 1 :(得分:1)

首先,您应该使用更新版本的jquery。

其次,您需要在服务器上设置访问策略以允许来自UI的CORS ...

php中的

看起来像这样:

<?php
 header("Access-Control-Allow-Origin: *");

您可以在此处了解如何使用其他语言进行操作:https://enable-cors.org

第三。您使用nginx作为Web服务器还是反向代理?如果是后者,则需要检查你的nginx xconfig。