拒绝加载脚本,因为它违反了以下内容安全策略指令

时间:2020-09-15 20:39:09

标签: javascript html css content-security-policy

来自外部的所有票据均存在此错误:

拒绝加载脚本 'https://code.jquery.com/jquery-3.4.1.slim.min.js',因为它违反了 以下内容安全策略指令:“ script-src'self' https://xxxx.com https://ajax.googleapis.com 'sha256-V8KVL4e3S2PwNnwHfycBcJMRnRhyyPiEpdxcGNLxzvk ='“。请注意 未明确设置“ script-src-elem”,因此将“ script-src”用作 后备。

我搜索了此错误,但是所有解决方案都有'unsafe-eval''unsafe-inline

据我了解,我需要编写一个meta标签。像这样:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'" />

我删除了unsafe-inline和unsafe-eval,但问题仍然存在。有想法吗?

这是我的标题中的内容

<head>
    <link rel="icon" href="img/am.png">
    <meta charset="utf-8">
    <!-- Required meta tags -->
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <script src="https://use.fontawesome.com/releases/v5.0.6/js/all.js"></script>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
        integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
    <link href="https://fonts.googleapis.com/css?family=Montserrat:300,600,700i" rel="stylesheet">
    <link rel="stylesheet" href="style.css">

    <title>Title</title>

</head>

在关闭身体标签之前,我有更多的纸条

<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"
    integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"
    crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
    integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
    crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"
    integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"
    crossorigin="anonymous"></script>

它总共有4个被中断的消息。标题中的一个(frontawesome)中的一个,所有三个脚本在结束body标签之前。

2 个答案:

答案 0 :(得分:0)

除了元标记CSP之外,您还可能设置了CSP响应标头。多个CSP只会更加严格,因为任何东西都必须通过两个CSP。您将需要修改标题CSP并将code.jquery.com添加到script-src。

答案 1 :(得分:0)

script-src'self'https://xxxx.com https://ajax.googleapis.com 'sha256-V8KVL4e3S2PwNnwHfycBcJMRnRhyyPiEpdxcGNLxzvk ='

表示您的CMS(或服务器)已经通过某种方式发布了内容安全策略:

  • PHP header()函数
  • .htaccess文件
  • 网络服务器配置(低概率)

您需要找到它的完成位置(在CMS中,它应该是用于管理标头的插件)。 然后添加到 script-src 指令:

  • 其他主机源(如果使用公开上传的CDN则不太安全):

    https://use.fontawesome.com https://code.jquery.com https://cdn.jsdelivr.net https://stackpath.bootstrapcdn.com

  • 从脚本的完整性属性中获取单引号哈希(或更安全):

    'sha384-J6qa4849blE2 + poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ + n' 'sha384-Q6E9RHvbIyZFJoft + 2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo' 'sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6' 'sha384-0AJY8UERsBUKdWcyF3o2kisLKeIo6G4Tbd8Y6fbyw6qYmn4WBuqcvxokp8m2UzSD'

  • 或混合:

    'sha384-J6qa4849blE2 + poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ + n' 'sha384-Q6E9RHvbIyZFJoft + 2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo' 'sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6' https://use.fontawesome.com

在第二个选项中,您必须在头部的脚本中添加 integrity = 属性:

<script src="https://use.fontawesome.com/releases/v5.0.6/js/all.js"
integrity="sha384-0AJY8UERsBUKdWcyF3o2kisLKeIo6G4Tbd8Y6fbyw6qYmn4WBuqcvxokp8m2UzSD"
  crossorigin="anonymous"></script>

已更新: 如果无法在<head>区域中更改脚本(完整性属性添加),则添加了第三个选项(混合规则):

<script src="https://use.fontawesome.com/releases/v5.0.6/js/all.js"></script>