脚本导致“拒绝执行内联脚本:需要‘unsafe-inline’关键字、散列…或随机数才能启用内联执行”

问题描述 投票:0回答:2

我不断收到此错误:

拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“default-src'self'data:gap:http://www.visitsingapore.comhttps://ssl.gstatic.com'unsafe-eval'”。启用内联执行需要“unsafe-inline”关键字、哈希值(“sha256-V+/U3qbjHKP0SaNQhMwYNm62gfWX4QHwPJ7We1PXokI=”)或随机数(“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', '[email protected]');
            xhr.setRequestHeader('token ID', '-------');
        },
        data: {},
        success: function (qwe12) {
            var TrueResult2 = JSON.stringify(qwe12);
            document.write(TrueResult2);
        },
        error: function () { },
    });</script>
javascript jquery ajax content-security-policy
2个回答
34
投票

解决此问题的最佳方法是从文档中取出

$.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='
">

以下是获取更多信息的几个地方:


-1
投票

就我而言,这是由于插件而发生的,插件试图在网站中执行某些操作,而网站阻止了它。 问题出在 BlazeMeter chrome 插件上。

所以只需删除插件,然后重试即可。 或者 请使用其他浏览器检查。

© www.soinside.com 2019 - 2024. All rights reserved.