我有一个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文件加载脚本或字体时在浏览器中遇到以下错误。
Refused to load the script 'https://localhost:44356/js/video.min.js' because it violates the following Content Security Policy directive: "script-src 'unsafe-eval' 'unsafe-inline' data:". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.
2testvideo.html:1 Refused to load the font 'data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAABDkAAsAAAAAG6gAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPgAAAFZRiV3hY21hcAAAAYQAAADaAAADPv749/pnbHlmAAACYAAAC3AAABHQZg6OcWhlYWQAAA3QAAAAKwAAADYZw251aGhlYQAADfwAAAAdAAAAJA+RCLFobXR4AAAOHAAAABMAAACM744AAGxvY2EAAA4wAAAASAAAAEhF6kqubWF4cAAADngAAAAfAAAAIAE0AIFuYW1lAAAOmAAAASUAAAIK1cf1oHBvc3QAAA/AAAABJAAAAdPExYuNeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGS7wTiBgZWBgaWQ5RkDA8MvCM0...2DDXbYkhKc+V0Bqs5Zt9JM1HQGBRTm/EezTmZNKtpcAMs9Yu6AK9caF76zoLWIWcfMGOSkVduvSWechqZsz040Ib2PY3urxBJTzriT95lipz+TN1fmAAAAeJxtkMl2wjAMRfOAhABlKm2h80C3+ajgCKKDY6cegP59TYBzukAL+z1Zsq8ctaJTTKPrsUQLbXQQI0EXKXroY4AbDDHCGBNMcYsZ7nCPB8yxwCOe8IwXvOIN7/jAJ76wxHfUqWX+OzgumWAjJMV17i0Ndlr6irLKO+qftdT7i6y4uFSUvCknay+lFYZIZaQcmfH/xIFdYn98bqhra1aKTM/6lWMnyaYirx1rFUQZFBkb2zJUtoXeJCeg0WnLtHeSFc3OtrnozNwqi0TkSpBMDB1nSde5oJXW23hTS2/T0LilglXX7dmFVxLnq5U0vYATHFk3zX3BOisoQHNDFDeZnqKDy9hRNawN7Vh727hFzcJ5c8TILrKZfH7tIPxAFP0BpLeJPA==' because it violates the following Content Security Policy directive: "font-src *".
据我所知,第一个脚本未违反《内容安全政策》,也没有任何文档可以描述“ script-src-elem”(这可能是一个线索)。
就CSS中的字体而言,浏览器中似乎存在一个错误,因为没有CSP指令看起来像“ font-src *”-因此,浏览器以某种方式覆盖了此CSP(或一个错误)。 无论如何,一直在尝试各种组合(例如,我无法将'self'放入script-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>
答案 0 :(得分:0)
第一个脚本未违反内容安全政策
政策规定:
script-src 'unsafe-eval' 'unsafe-inline' data:;
您使用以下方式加载CSS:
<script src="js/video.min.js"></script>
所以,让我们依次检查一下:
unsafe-eval
吗?不,您没有使用eval()
或类似的方法来加载脚本。这是一个src
属性。unsafe-inline
吗?不,它不是内联的,它是一个src
属性。data:
吗?否。这是一个相对URL,您不能相对于data:scheme URL。您可能正在使用http:
。因此,肯定确实违反了CSP。
可能您想将'self'
添加到允许的来源。
就CSS中的字体而言,浏览器中似乎存在一个错误,因为没有CSP指令看起来像“ font-src *”-因此,浏览器以某种方式覆盖了此CSP(或一个错误)。
对此最可能的解释是,您正在通过HTTP标头和 <meta>
提供CSP,并且HTTP标头具有优先级(因为规范要求这样做)。
答案 1 :(得分:0)
简单运行:
php bin / magento模块:禁用Magento_Csp