Html 詹金斯内容安全策略

Html 詹金斯内容安全策略,html,css,jenkins,content-security-policy,Html,Css,Jenkins,Content Security Policy,我对詹金斯的内容安全政策感到困惑 我知道这些网站: 我有一个html页面显示通过詹金斯三叶草插件。此html页面使用内联样式,例如: <div class='greenbar' style='width:58px'> div元素使progressbar可视化。 使用默认Jenkins CSP配置会导致以下结果: 我想要的结果如下所示: 我试图放松CSP规则,添加不同级别(self、unsafe inline等)的不同参数组合(script src、style src

我对詹金斯的内容安全政策感到困惑

我知道这些网站:

我有一个html页面显示通过詹金斯三叶草插件。此html页面使用内联样式,例如:

<div class='greenbar' style='width:58px'>

div元素使progressbar可视化。 使用默认Jenkins CSP配置会导致以下结果:

我想要的结果如下所示:

我试图放松CSP规则,添加不同级别(self、unsafe inline等)的不同参数组合(script src、style src),但没有任何效果

所以我现在的问题是:

  • 我必须在哪里指定CSP配置
  • 可以使用内联样式吗
  • 样式应位于何处?我的css样式表位于Jenkins服务器的本地
  • 让内联样式和CSP规则“满意”的最佳方法是什么
  • 更新

    1。试试看:
    -Dhudson.model.DirectoryBrowserSupport.CSP=“default src'self”
    在jenkins.xml文件中。然后发生以下错误:

    拒绝应用内联样式,因为它违反以下要求 内容安全策略指令:“默认src‘self’” “不安全内联”关键字、哈希('sha256-')或nonce ('nonce-…')是启用内联执行所必需的 未显式设置“style src”,因此将“default src”用作 撤退

    2.试试看
    -Dhudson.model.DirectoryBrowserSupport.CSP=“default src'self”;在jenkins.xml文件中设置src'self'
    。然后发生以下错误:

    拒绝应用内联样式,因为它违反以下要求 内容安全策略指令:“样式src‘self’”。要么 “不安全内联”关键字,哈希 ('sha256-'),或临时值 启用内联执行需要('nonce-…')

    我明白这个尝试不能解决我的问题,因为默认的src包括样式src

    3。试试看 jenkins.xml文件中的
    -Dhudson.model.DirectoryBrowserSupport.CSP=“default src'self”;style src'safe inline'
    。然后发生以下错误:

    拒绝加载样式表 s://jenkins/andsomedir/stylesheet.css[its]https://... 不允许发布超过两个链接:(] 因为它违反了以下内容安全策略指令: “样式src‘不安全的内联’”


    在进行实验时,我建议使用脚本控制台动态调整CSP参数,如页面上所述。(Jenkins wiki页面中还有另一个说明,表明您可能需要强制重新加载页面以查看新设置。)

    为了同时使用内联样式和本地样式表,您需要添加self和unsafe内联:

    根据progressbar的操作方式,您可能还需要以相同的方式调整“script src”


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

    只是为了明确在Jenkins上永久设置此CSP属性

    如果您在Ubuntu上运行Jenkins:

  • $vim/etc/default/jenkins
  • 找到带有
    JAVA\u ARGS
    的行,并添加如下CSP策略:
    JAVA\u ARGS=“-Djava.awt.headless=true-Dhudson.model.DirectoryBrowserSupport.CSP=\”默认src“self”不安全内联“不安全eval”;img src数据:;\”
  • 如果您在CentOS上运行Jenkins

  • $vim/etc/sysconfig/jenkins
  • 找到带有
    JENKINS\u JAVA\u OPTIONS
    的行,并添加如下CSP策略:
    JENKINS\u JAVA\u OPTIONS=“-Djava.awt.headless=true-Dhudson.model.DirectoryBrowserSupport.CSP=\”默认src“自我”不安全内联“不安全评估”;img src数据:;\”
  • 保存文件并重新启动Jenkins。
    $sudo服务重新启动
    或在浏览器中
    http://localhost:8080/safeRestart

    为@Kirill的答案添加更多内容

    如果jenkins部署在
    tomcat
    容器中,请在
    setenv.sh文件中设置
    CATALINA\u OPTS
    环境值(位于
    ${CATALINA\u BASE}/bin
    文件夹中),如下所示:-

    export CATALINA_OPTS="-Xmx2048m -Xms2048m -XX:MaxNewSize=768m -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${CATALINA_BASE}/logs/java.hprof -XX:ParallelGCThreads=2 -XX:-UseConcMarkSweepGC -Dcom.sun.management.jmxremote -Dhudson.model.DirectoryBrowserSupport.CSP=\"\" 
    

    更改上述文件后,重新启动
    tomcat
    。它对我来说很有吸引力。希望它能有所帮助:)


    注意:-CSP仅适用于HTML publisher、maven plugin等插件。它不适用于电子邮件HTML文件。

    尝试共享我的过程时,我始终遵循这些解决方法之一。但是,您需要注意安全限制,因为应用这些修复可能会不安全

  • 临时修复:
  • 转到Jenkins控制台,根据您想要的CSP策略类型应用以下命令

    System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox allow-scripts; default-src 'self'; style-src 'self' 'unsafe-inline'; script-src * 'unsafe-inline';")
    
    此解决方案旨在进行临时测试或开发环境

    如果要永久更改它,请在运行应用程序时将其添加到java命令中:

    -Dhudson.model.DirectoryBrowserSupport.CSP="sandbox allow-scripts; default-src 'self'; style-src 'self' 'unsafe-inline';"
    
    最后,我强烈建议您阅读以下文章:

    詹金斯官方文件

    临时或永久重置CSP规则的变通方法:

    我也有类似的问题。下面的解决方案对我很有效

    java -Dhudson.model.DirectoryBrowserSupport.CSP="sandbox allow-scripts allow-popups allow-popups-to-escape-sandbox; style-src 'unsafe-inline' *;" -Dsvnkit.http.sslProtocols=TLSv1 -jar C:/server/Jenkins.war --httpPort=8280
    

    以下属性适用于我。以下属性允许所有外部服务器

    System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src * 'unsafe-inline' 'unsafe-eval'; script-src * 'unsafe-inline' 'unsafe-eval'; connect-src * 'unsafe-inline'; img-src * data: blob: 'unsafe-inline'; frame-src *; style-src * 'unsafe-inline';")
    

    可以使用内联样式或Jenkins服务器上的文件中的样式。听起来您的思路是正确的,但您没有发布您所尝试的内容(是否使用脚本控制台?键入了什么?您将CSP参数设置为什么值?),所以很难指出哪里出了问题。感谢您的回答。更新了我的帖子。如果您不确定如何永久应用这些设置(因为在Jenkins重新启动后通过脚本控制台进行的更改将被丢弃),您可以将它们附加到
    /etc/default/Jenkins
    中的JAVA_参数中:<
    java -Dhudson.model.DirectoryBrowserSupport.CSP="sandbox allow-scripts allow-popups allow-popups-to-escape-sandbox; style-src 'unsafe-inline' *;" -Dsvnkit.http.sslProtocols=TLSv1 -jar C:/server/Jenkins.war --httpPort=8280
    
    System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src * 'unsafe-inline' 'unsafe-eval'; script-src * 'unsafe-inline' 'unsafe-eval'; connect-src * 'unsafe-inline'; img-src * data: blob: 'unsafe-inline'; frame-src *; style-src * 'unsafe-inline';")