Jenkins中預覽HTML文件無法顯示圖片問題解決辦法

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啟動時加入?yún)?shù)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 提供的靜態(tài)文件(特別是 DirectoryBrowserSupport)。此標頭設置為一組非常嚴格的默認權限,以保護 Jenkins 用戶免受工作區(qū)、/userContent或存檔工件中的惡意 HTML/JS 文件的侵害。

不幸的是,一些流行且實用的插件受到了影響,除非放寬默認規(guī)則,否則將失去部分功能。

從 Jenkins 2.200 開始,可以在 Jenkins 系統(tǒng)配置中定義資源根 URL ,作為放寬內容安全策略規(guī)則的替代方法。有關詳細信息,請參閱其內聯(lián)幫助。

默認規(guī)則集

默認規(guī)則設置為:
sandbox; default-src 'none'; img-src 'self'; style-src 'self';

此規(guī)則集產(chǎn)生以下結果:

  • 完全不允許 JavaScript
  • 不允許插件(對象/嵌入)
  • 不允許內聯(lián) CSS,或來自其他網(wǎng)站的 CSS
  • 不允許使用其他網(wǎng)站的圖片
  • 不允許使用框架
  • 不允許使用網(wǎng)絡字體
  • 不允許 XHR/AJAX
  • ETC。

詳細地:

  • sandbox限制頁面可以執(zhí)行的多項操作,類似于sandboxiframe 上設置的屬性。有關禁止操作的完整列表。此屬性未得到廣泛支持。
  • default-src 'none' 禁止從任何地方加載腳本、AJAX/XHR/WebSockets/EventSources 的 URL、字體、插件對象、媒體和框架(圖像和樣式也被禁止,但下面描述的更具體的規(guī)則允許)。
  • img-src 'self'允許從 Jenkins 提供的其他文件加載圖像。禁止內聯(lián)圖像定義。
  • style-src 'self'允許從 Jenkins 提供的其他文件加載樣式表。禁止內聯(lián)樣式表。

執(zhí)行

可以通過設置系統(tǒng)屬性來修改 Jenkins 發(fā)送的 CSP 標頭hudson.model.DirectoryBrowserSupport.CSP

如果其值為空字符串,則java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar jenkins.war根本不會發(fā)送標題。

這可能非常不安全,應僅在檢查整體安全設置后才使用。

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

對系統(tǒng)屬性的更改將立即生效,因此可以通過Jenkins 腳本控制臺臨時設置此系統(tǒng)屬性,從而允許您嘗試不同的值:

為標題設置自定義值:

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")

最后使用

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox allow-scripts; default-src 'none'; img-src * data:; style-src 'self' 'unsafe-inline' data: ; script-src 'self' 'unsafe-inline' 'unsafe-eval' ;")

參考文獻

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容