Jenkins 内容安全策略

新手上路,请多包涵

我对 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),但没有任何效果。

所以我现在的问题是:

  1. 我必须在哪里指定 CSP 配置?
  2. 是否可以使用内联样式?
  3. 样式应该放在哪里?我的 css 样式表位于本地 Jenkins 服务器上。
  4. “满足”内联样式和 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 许可协议

阅读 503
2 个回答

在试验时,我建议使用脚本控制台动态调整 CSP 参数,如 配置内容安全策略 页面中所述。 (Jenkins wiki 页面中还有另一条注释表明您可能需要强制重新加载页面才能看到新设置。)

为了同时使用内联样式和本地样式表,您需要同时添加 selfunsafe-inline

 System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self'; style-src 'self' 'unsafe-inline';")

根据进度条的操作方式,您可能还需要以相同的方式调整“script-src”。

找到有效的设置后,您可以调整 Jenkins 启动脚本以添加 CSP 参数定义。

原文由 Dave Bacher 发布,翻译遵循 CC BY-SA 3.0 许可协议

只是为了清楚地了解如何在 Jenkins 上永久设置此 CSP 属性。

如果您在 Ubuntu 上运行 Jenkins:

  1. $ vim /etc/default/jenkins
  2. 找到带有 JAVA_ARGS 的行并像这样添加 CSP 策略: JAVA_ARGS="-Djava.awt.headless=true -Dhudson.model.DirectoryBrowserSupport.CSP=\"default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src data:;\""

如果您在 CentOS 上运行 Jenkins:

  1. $ vim /etc/sysconfig/jenkins
  2. 找到带有 JENKINS_JAVA_OPTIONS 的行并添加如下 CSP 策略: JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.model.DirectoryBrowserSupport.CSP=\"default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src data:;\""

保存文件并重新启动 Jenkins。 $ sudo service jenkins restart 或在你的浏览器中 http://localhost:8080/safeRestart

原文由 de.la.ru 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题