当前位置: 首页 > 知识库问答 >
问题:

脚本导致“拒绝执行内联脚本:启用内联执行需要'unsafe-inline'关键字、哈希…或随机数”

邢高爽
2023-03-14

我一直得到这个错误:

拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“default-src'self'data:gap:http://www.visitsingapore.com https://ssl.gstatic.com'unsafe-eval'”。“unsafe-inline”关键字、哈希('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个答案

昌乐生
2023-03-14

解决此问题的最佳方法是从文档中取出$.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='
">

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

  • developers.google.com/web/gidatals/security/csp/#if_you_absolutely_must_use_it
  • www.owasp.org/index.php/content_security_policy_cheat_sheet#refactoring_inline_code
 类似资料:
  • 我读过类似的问题,答案都围绕着纠正这样的一行: 不幸的是,我读过的书中没有什么能解决这个问题。 在我的index.html中,我有: 在我的app.js im中使用: 当我访问该页时,控制台记录 LocalHost/:1拒绝应用来自“http://localhost:3000/public/css/style.css”的样式,因为它的MIME类型(“text/html”)不是受支持的样式表MIME

  • 当我浏览http://localhost:8080/create时,它工作正常,但当浏览http://localhost:8080/create/344或http://localhost:8080/edit/224时,我会得到以下错误: 拒绝应用来自“http://localhost:8080/edit/dist/main.css”的样式,因为它的MIME类型(“text/html”)不是受支持的

  • 问题内容: 我正在尝试使用内联脚本运行Update api,我的代码是 当我执行它时,我得到 我的日志看起来像 有人可以帮我弄这个吗? 我试过了 client.prepareUpdate(“ result”,typeName,“ 1”)。setScript(newScript(“ ctx._source.gender.value = ctx._source [‘” + AggregateValue

  • 我试图使用内联脚本运行更新api,我的代码是 当我执行它时,我得到 现在的错误类似于

  • 我正在学习将Cordova与jquery mobile结合使用,我有以下错误: 拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“默认src“self”数据:间隙:https://ssl.gstatic.com “不安全评估”。启用内联执行需要'unsafe inline'关键字、哈希('sha256-iacGaS9lJJpFDLww4DKQsrDPQ2lxppM2d2GGnzCeKkU=')

  • 问题内容: 我想从PHP脚本执行系统上存在的Bash脚本。我的系统上有两个脚本。其中一个是称为at at 的PHP脚本,另一个是称为at at 的Bash脚本。 我的client.php脚本看起来像 我的睾丸看起来像 当我在终端上执行以下操作时 我在终端上得到以下输出 但是当我在打开页面时 我得到以下输出 即使执行了chmod + x testscript,我仍然收到此错误。 我如何从浏览器中获取