【问题标题】:Script causes “Refused to execute inline script: Either the 'unsafe-inline' keyword, a hash… or a nonce is required to enable inline execution”脚本导致“拒绝执行内联脚本:需要 'unsafe-inline' 关键字、哈希……或随机数才能启用内联执行”
【发布时间】:2018-02-25 16:10:21
【问题描述】:

我不断收到此错误:

拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“default-src 'self' data: gap: http://www.visitsingapore.com https://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', '-------@gmail.com');
            xhr.setRequestHeader('token ID', '-------');
        },
        data: {},
        success: function (qwe12) {
            var TrueResult2 = JSON.stringify(qwe12);
            document.write(TrueResult2);
        },
        error: function () { },
    });</script>

【问题讨论】:

  • 这是浏览器特有的错误吗?或者:这是 webkit 特定的安全“功能”吗?

标签: jquery ajax content-security-policy


【解决方案1】:

解决此问题的最佳方法是将 $.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='
">

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

【讨论】:

  • 我试图努力创建一个新的js文件并将标签放在html文件中
  • 表示问题中描述的问题已经解决。但是,除了您在问题中描述的问题之外,您还有一个完全红外线的问题,并且在这里得到了回答。所以你应该发布一个关于其他不相关问题的新问题
猜你喜欢
  • 2020-02-12
  • 2014-07-14
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 2017-06-14
相关资源
最近更新 更多