样式属性上的内容安全策略随机数被忽略

问题描述

我正在设置内容安全策略,供应商库 (bootstap) 正在设置内嵌样式以显示对话框,Edge/Chromium 表示已拒绝更改。

我的 CSP 标题(为了便于阅读,示例拆分为单独的行)是:

default-src 'none'; 
script-src 'self' 'nonce-OGrJRYbkub0OVcGnjoCFDw/OF+bamLQddwgBEfu9HjE='; 
style-src 'self' 'nonce-OGrJRYbkub0OVcGnjoCFDw/OF+bamLQddwgBEfu9HjE='; 
style-src-attr 'self' 'nonce-OGrJRYbkub0OVcGnjoCFDw/OF+bamLQddwgBEfu9HjE='; 
img-src 'self' https://www.gravatar.com;
font-src 'self' 'nonce-OGrJRYbkub0OVcGnjoCFDw/OF+bamLQddwgBEfu9HjE=';
connect-src 'self';
prefetch-src 'self';
form-action 'self';
manifest-src 'self';
upgrade-insecure-requests; block-all-mixed-content; report-to default;

如您所见,我设置了 style-src-attr,我的 html 如下所示:

<div id="large-right-modal" class="modal fade show" tabindex="1" role="dialog" aria-labelledby="large-right-modal-label" nonce="OGrJRYbkub0OVcGnjoCFDw/OF+bamLQddwgBEfu9HjE=" aria-modal="true">
</div>

当我显示这个引导模式时,库添加了内联样式 style="display: block;" 并且浏览器给了我错误

拒绝应用内联样式,因为它违反了以下内容安全策略指令:“style-src-attr 'self' 'nonce-OGrJRYbkub0OVcGnjoCFDw/OF+bamLQddwgBEfu9HjE='”。启用内联执行需要“unsafe-inline”关键字、哈希(“sha256-TH1YO7Owtg52rPfkQs+Us6yN6exn7w99CdIBBm9BmMQ=')或随机数(“nonce-...”)。

这没有多大意义,nonce 与被修改元素上的 nonce 相同。唯一有效的方法是将 unsafe-inline 添加到我试图避免的策略中。

解决方法

Nonce 可用于 nonceable 元素。至少在 CSP 级别 2 中,这主要限于