我对 Jenkins 内容安全策略感到困惑。
我知道这些网站:
我有一个通过 Jenkins Clover 插件显示的 html 页面。此 html 页面使用内联样式,例如:
<div class='greenbar' style='width:58px'>
div 元素可视化一个进度条。使用默认的 Jenkins CSP 配置会导致以下结果: Progressbar_FAIL
我想要的结果如下所示: Progressbar_WORKS
我试图放宽 CSP 规则,添加具有不同级别(self、unsafe-inline、..)的不同参数组合(script-src、style-src),但没有任何效果。
所以我现在的问题是:
- 我必须在哪里指定 CSP 配置?
- 是否可以使用内联样式?
- 样式应该放在哪里?我的 css 样式表位于本地 Jenkins 服务器上。
- “满足”内联样式和 CSP 规则的最佳方式是什么
更新
1. 在 jenkins.xml 文件中尝试: -Dhudson.model.DirectoryBrowserSupport.CSP="default-src 'self'
。然后出现如下错误:
拒绝应用内联样式,因为它违反了以下内容安全策略指令:“default-src ‘self’”。启用内联执行需要“不安全内联”关键字、散列(“sha256-”)或随机数(“nonce-…”)。另请注意,未明确设置“style-src”,因此“default-src”用作后备。
2. 在 jenkins.xml 文件中尝试 -Dhudson.model.DirectoryBrowserSupport.CSP="default-src 'self'; style-src 'self'
。然后出现如下错误:
拒绝应用内联样式,因为它违反了以下内容安全策略指令:“style-src ‘self’”。启用内联执行需要“不安全内联”关键字、散列(“sha256-”)或随机数(“nonce-…”)
我明白这个尝试不能解决我的问题,因为 default-src 包括 style-src
3. 在 jenkins.xml 文件中尝试 -Dhudson.model.DirectoryBrowserSupport.CSP="default-src 'self'; style-src 'unsafe-inline'
。然后出现如下错误:
拒绝加载样式表 s://jenkins/andsomedir/stylesheet.css [其 https://… 不允许发布超过两个链接 :(] 因为它违反了以下内容安全策略指令:“style-src ‘不安全内联’”。
原文由 Thomas 发布,翻译遵循 CC BY-SA 4.0 许可协议
在试验时,我建议使用脚本控制台动态调整 CSP 参数,如 配置内容安全策略 页面中所述。 (Jenkins wiki 页面中还有另一条注释表明您可能需要强制重新加载页面才能看到新设置。)
为了同时使用内联样式和本地样式表,您需要同时添加 self 和 unsafe-inline :
根据进度条的操作方式,您可能还需要以相同的方式调整“script-src”。
找到有效的设置后,您可以调整 Jenkins 启动脚本以添加 CSP 参数定义。