美文网首页
Jenkins中预览HTML文件无法显示图片问题解决办法

Jenkins中预览HTML文件无法显示图片问题解决办法

作者: 羋学僧 | 来源:发表于2024-06-20 08:35 被阅读0次

Jenkins中预览HTML文件无法显示图片问题解决办法

浏览器错误信息

log.html:1 Refused to load the image 'http://xxx:9000/default/xxxxx' because it violates the following Content Security Policy directive: "img-src 'self' data:".

HTML中图片不显示代码

< img src="http://xxx:9000/default/xxxxx" />

如果该src的值可以显示图片

< img src="data:image/png;base64,iVBORw...." />

虽然可以解决图片显示问题,但是会导致HTML文件过大

一劳永逸的解决方法

修改Jenkins的安全策略Jenkins : Configuring Content Security Policy

Jenkins启动时加入参数hudson.model.DirectoryBrowserSupport.CSP

java -Dhudson.model.DirectoryBrowserSupport.CSP="sandbox allow-scripts; default-src 'none'; img-src * ; style-src 'self' 'unsafe-inline' data: ; script-src 'self' 'unsafe-inline' 'unsafe-eval' ;" -jar jenkins.war

Jenkins:配置内容安全策略

Jenkins 1.641 / Jenkins 1.625.3 将Content-Security-Policy标头引入 Jenkins 提供的静态文件(特别是 DirectoryBrowserSupport)。此标头设置为一组非常严格的默认权限,以保护 Jenkins 用户免受工作区、/userContent或存档工件中的恶意 HTML/JS 文件的侵害。

不幸的是,一些流行且实用的插件受到了影响,除非放宽默认规则,否则将失去部分功能。

从 Jenkins 2.200 开始,可以在 Jenkins 系统配置中定义资源根 URL ,作为放宽内容安全策略规则的替代方法。有关详细信息,请参阅其内联帮助。

默认规则集

默认规则设置为:
sandbox; default-src 'none'; img-src 'self'; style-src 'self';

此规则集产生以下结果:

  • 完全不允许 JavaScript
  • 不允许插件(对象/嵌入)
  • 不允许内联 CSS,或来自其他网站的 CSS
  • 不允许使用其他网站的图片
  • 不允许使用框架
  • 不允许使用网络字体
  • 不允许 XHR/AJAX
  • ETC。

详细地:

  • sandbox限制页面可以执行的多项操作,类似于sandboxiframe 上设置的属性。有关禁止操作的完整列表。此属性未得到广泛支持。
  • default-src 'none' 禁止从任何地方加载脚本、AJAX/XHR/WebSockets/EventSources 的 URL、字体、插件对象、媒体和框架(图像和样式也被禁止,但下面描述的更具体的规则允许)。
  • img-src 'self'允许从 Jenkins 提供的其他文件加载图像。禁止内联图像定义。
  • style-src 'self'允许从 Jenkins 提供的其他文件加载样式表。禁止内联样式表。

执行

可以通过设置系统属性来修改 Jenkins 发送的 CSP 标头hudson.model.DirectoryBrowserSupport.CSP

如果其值为空字符串,则java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar jenkins.war根本不会发送标题。

这可能非常不安全,应仅在检查整体安全设置后才使用。

任何其他值都将用作标头值,例如java -Dhudson.model.DirectoryBrowserSupport.CSP="sandbox; default-src 'self';" -jar jenkins.war

对系统属性的更改将立即生效,因此可以通过Jenkins 脚本控制台临时设置此系统属性,从而允许您尝试不同的值:

为标题设置自定义值:

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

取消设置标题:

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")

将标题设置为默认值:

System.clearProperty("hudson.model.DirectoryBrowserSupport.CSP")

找出当前标题值:

System.getProperty("hudson.model.DirectoryBrowserSupport.CSP")

参考文献

相关文章

网友评论

      本文标题:Jenkins中预览HTML文件无法显示图片问题解决办法

      本文链接:https://www.haomeiwen.com/subject/ioyccjtx.html