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

2024-06-20  本文已影响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';

此规则集产生以下结果:

详细地:

执行

可以通过设置系统属性来修改 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")

参考文献

上一篇 下一篇

猜你喜欢

热点阅读