忽略样式属性的内容安全策略随机数
Posted
技术标签:
【中文标题】忽略样式属性的内容安全策略随机数【英文标题】:Content Security Policy nonce on style attribute being ignored 【发布时间】:2021-05-25 04:21:01 【问题描述】:我正在设置内容安全策略,供应商库(引导程序)正在设置内联样式以显示对话框,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
添加到我试图避免的策略中。
【问题讨论】:
【参考方案1】:Nonce 可以用在 nonceable 元素中。至少在 CSP 级别 2 中,这主要限于
【讨论】:
我认为这是可以接受的;您可以在标签上定义随机数,否则您将无法处理由 JScript 更改的样式,或者无法在几个特定位置使用内联样式而不使用 catch all 'unsafe-inline' 仅限<script>
and <style>
are nonceable elements。 JScript 的句柄样式是allowed,除了setAttribute("style", ...)
func。顺便说一句,bootstarp 使用 CSP 安全方式添加 style='display:block;'
并根据 sha256-TH1YO7Owtg52rPfkQs+Us6yN6exn7w99CdIBBm9BmMQ=
判断 - 它不是 style='display:block;'
被阻止。 font-src
指令涵盖 @font-face
构造 - 它不是 html 元素,因此无法应用 'nonce-value'
。 style-src-attr
指令不支持 'self'
和 'nonce-value'
。以上是关于忽略样式属性的内容安全策略随机数的主要内容,如果未能解决你的问题,请参考以下文章