Html 如何修复内容安全策略错误?

Html 如何修复内容安全策略错误?,html,content-security-policy,Html,Content Security Policy,我有一个CSP元标记,看起来是这样的: <meta http-equiv="Content-Security-Policy" content="font-src 'self' 'unsafe-inline' data:; img-src 'self' data:; style-src 'self' 'unsafe-inline' data:; script-src 'unsafe-eval' 'unsafe-inline' data:; default

我有一个CSP元标记,看起来是这样的:

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

我在body标记中有一个本地JavaScript文件引用:

   <script src="js/video.min.js"></script>

以及标题标记中的本地样式表文件引用:

<link href="css/video-js.css" rel="stylesheet" />

但是,我在浏览器中遇到以下错误,拒绝从CSS文件加载脚本或字体

拒绝加载脚本的https://localhost:44356/js/video.min.js'因为它违反了以下内容安全策略指令:“script src'safe eval'safe inline'数据:”。请注意,未显式设置“script src elem”,因此将“script src”用作回退

2testvideo.html:1拒绝加载字体的数据:应用程序/font-woff;字符集=utf-8;base64,D09GRGABAAAABDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPIILILK9/P749/PNBHBHBHBHBHBABABABABABABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2.2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 Z7NCPB8YXWCoE8iwXvOIN7/jAJ76wxHfUqWX+OzgumWAjJMV17i0Ndlr6irLKO+QftdT7i6y4ufsuvcnay+lfyzazazaqchramf/xifdyn98bqhraktm/6wmnyayirx1rfuqzfkbk2zjutoxeg0wnlthesfc3otrnoznw0tkspbmdb1nsde5ojxw23hts2/t0lilglxx7dmfvxln5u0yathf3zx7bx7boisoqhndfnqnqkdy9hrnavh7hzj5c8hfjj5c8czjjjj5c8czzjjjjjjjjjjjjjg8zzjjjjjjjjjjg9h7f7f7f7f7“字体src*”

据我所知,第一个脚本没有违反内容安全策略,而且在我能找到的任何地方都没有任何描述“script src elem”的文档(这可能是一个线索)

就CSS中的字体而言,浏览器中似乎存在一个bug,因为没有类似于“font src*”的CSP指令-因此,浏览器不知何故覆盖了这个CSP(或者它只是一个bug)。 不管怎样,我一直在尝试各种组合(例如,我不能将“self”放在脚本src中,或者出现更多错误)。这没有任何意义

以下是完整的HTML:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
 <meta http-equiv="Content-Security-Policy" content="font-src 'self' 'unsafe-inline' data:; img-src 'self' data:; style-src 'self' 'unsafe-inline' data:; script-src 'unsafe-eval' 'unsafe-inline' data:; default-src 'self' localhost:*">
    <title></title>
    <link href="css/video-js.css" rel="stylesheet" />
</head>
<body>
    <video id='my-video' class='video-js' controls preload='auto' width='640' height='360'
           poster='/videos/Factory_Clearance30_03_16.jpg' data-setup='{}'>
        <source src="/videos/Factory_Clearance30_03_16.webm" type="video/webm">
        <source src="/videos/Factory_Clearance30_03_16.ogv" type="video/ogg">
        <source src="/videos/Factory_Clearance30_03_16.mp4" type="video/mp4">
    </video>
    <script src="js/video.min.js"></script>
</body>
</html>

第一个脚本没有违反内容安全策略

政策规定:

您可以使用以下内容加载脚本:


那么,让我们依次检查一下:

  • 是否为
    safe eval
    ?否,您没有使用
    eval()
    或任何类似的方法来加载脚本。它是
    src
    属性
  • 它是
    不安全内联的
    ?不,它不是内联的;它是一个
    src
    属性
  • 它是
    数据:
    ?不是。它是一个相对URL,您不能与数据:方案URL相对。您可能正在使用
    http:
因此它肯定违反了CSP

您可能希望将
'self'
添加到允许的源代码中


就CSS中的字体而言,浏览器中似乎存在一个bug,因为没有类似于“font src*”的CSP指令-因此,浏览器不知何故覆盖了这个CSP(或者它只是一个bug)

对此最可能的解释是,您正在通过HTTP头
提供CSP,并且HTTP头具有优先权(因为规范要求这样做)。

只需运行:

php bin/magento module:disable Magento_Csp

脚本的某些部分调用使用eval的部分——这是必要的。脚本的某些部分还使用内联脚本创建元素(我没有编写这些脚本),因此脚本的某些部分使用DataBase64是必要的(脚本中生成的元素也使用DataBase64)需要使用数据:指定符。使用“自我”对这个脚本根本不起作用(它会产生一系列的违规行为),而且似乎不适合其他的说明符。HTTP报头必须在别处重写。这是dotNETCype——我没有想到它可能是黑拳击。我没有要求。(重写)更多。freedom“我添加到CSP中,它变得越糟糕。现在Chrome在一行声称worker src没有被显式设置,紧接着在下一行出现一个错误,说它违反了worker src指令。(那么它是哪个?未设置?还是违反?)。因此很明显某些部分正在覆盖其他部分(浏览器、http头等)坦率地说,在这一点上,我希望我的服务器提供的一切都是允许的(不管它做什么)。简单来说,这是安全的:HTTP头覆盖元标记声明,而不是相反的方式?(Chrome似乎很难决定接受哪一个)注意:如果您同时通过HTTP头和
标记发送CSP,请注意,以后的CSP只能收紧以前的策略,而不能放松。如果您拒绝X,您以后就不能允许X;它就是不起作用。这是出于设计。不适合我。我发现了十几个或更多的引用,没有一个是如此全面或全面。不过,谢谢。修复CSP问题s并不意味着完全禁用它。您需要为此添加创建扩展,并允许您不在Csp中包含哪个url。
<script src="js/video.min.js"></script>
php bin/magento module:disable Magento_Csp