脚本导致“拒绝执行内联脚本:不安全内联'关键字,哈希...或nonce是启用内联执行所必需的“

时间:2017-09-16 18:09:15

标签: jquery ajax content-security-policy

我一直收到这个错误:

  

拒绝执行内联脚本,因为它违反了以下内容安全策略指令:" default-src' self'数据:差距:http://www.visitsingapore.com https://ssl.gstatic.com' unsafe-eval'"。 “不安全 - 内联”和“不安全”。关键字,哈希(' sha256-V + / U3qbjHKP0SaNQhMwYNm62gfWX4QHwPJ7We1PXokI =')或nonce(' nonce -...')是启用内联执行所必需的。另请注意' script-src'没有明确设置,所以' default-src'被用作后备。

有谁能告诉我如何解决这个问题,这是什么意思?我的代码是:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data:gap: http://www.visitsingapore.com   https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="css/index.css">
<link rel="stylesheet" href="css/jquery.mobile-1.4.5.css">
<script src="lib/jquery-3.2.1.min.js"></script>

<script type="text/javascript" src="scripts/key.js"></script>
<script>$.ajax({
        url: ' http://www.visitsingapore.com/api.listing.en.json',
        type: 'GET',
        beforeSend: function (xhr) {
            xhr.setRequestHeader('email ID', '-------@gmail.com');
            xhr.setRequestHeader('token ID', '-------');
        },
        data: {},
        success: function (qwe12) {
            var TrueResult2 = JSON.stringify(qwe12);
            document.write(TrueResult2);
        },
        error: function () { },
    });</script>

1 个答案:

答案 0 :(得分:2)

解决此问题的最佳方法是从文档中取出$.ajax(…)调用并将其移至名为ajax-call.js的外部文件中,然后执行此操作:

<script src="ajax-call.js"></script>

更好的原因是,如果您已经为您的文档设置CSP策略,那么理想情况下您应该去除所有内联脚本。

但是如果由于某种原因你真的需要将该脚本保持在文档内联,你可以更改meta元素,以便包含错误消息中的确切sha256哈希值script-src指令的源代码,如下所示(为了便于阅读,添加了一些换行符):

<meta http-equiv="Content-Security-Policy"
  content="default-src 'self' data:gap: http://www.visitsingapore.com 
  https://ssl.gstatic.com 'unsafe-eval';
  style-src 'self' 'unsafe-inline';
  media-src *;
  script-src: 'sha256-V+/U3qbjHKP0SaNQhMwYNm62gfWX4QHwPJ7We1PXokI='
">

还有几个地方可以获得更多信息: