Web报告的内容安全策略(CSP)

最后编辑了

介绍

Jenkins 1.641将内容 - 安全策略(CSP)标头介绍给Jenkins(特别是DirectoryBrowserupport)服务的静态文件。此标题设置为非常有限的默认权限,以保护Jenkins用户免受恶意HTML / JS文件。

不幸的是,许多插件包括鳞片插件,受此影响。除非放宽默认内容 - 安全策略规则,否则蜂鸣器插件仍然能够执行测试,但从测试执行中的Web报告不会正确显示,除非放宽默认内容 - 安全策略规则。本文介绍如何修改内容安全策略设置,使Web报告正常工作。

Jenkins默认内容安全策略

Jenkins默认内容安全策略是:

sandbox; default-src 'none'; img-src 'self'; style-src 'self';

上述规则不允许运行JavaScript,使用内联CSS或Web字体。

The Web Report is generated dynamically through JavaScript code based on tests results stored in the file data/results-v1.js. Therefore, with the default CSP settings, the web report is not being displayed correctly (and the web browser’S控制台通常显示有关阻止脚本执行的多个错误,并拒绝加载字体和/或样式表)。

暂时放松内容安全政策

要更改默认内容安全策略转到 管理Jenkins. -> 脚本控制台 并键入控制台以下命令:

System.clearProperty("hudson.model.directorybrowsersupport.csp.");
System.setProperty("hudson.model.directorybrowsersupport.csp.", "sandbox allow-same-origin allow-scripts; default-src 'self'; script-src * 'unsafe-eval'; img-src *; style-src * 'unsafe-inline'; font-src * data:");

然后再次尝试查看Web报告。

永久放松内容安全政策

上述解决方案将立即生效,但重新启动Jenkins Server将将内容安全策略设置重置为其默认值。

To implement a permanent solution one must modify/add Java arguments to the start of Jenkins (詹金斯.war) by setting the system property hudson.model.directorybrowsersupport.csp. 对于Java过程本身(即,这不能在Jenkins中完成 脚本控制台)。

一般的做法

For example you may have this simple command (possibly in a .bat, .cmd or shell script file) for launching Jenkins:

java -jar jenkins.war

添加设置后 hudson.model.directorybrowsersupport.csp. to it:

java -Dhudson.model.directorybrowsersupport.csp.="sandbox allow-same-origin allow-scripts; default-src 'self'; script-src * 'unsafe-eval'; img-src *; style-src * 'unsafe-inline'; font-src * data:" -jar jenkins.war

在Debian / Ubuntu上

编辑 / etc / default / jenkins 通过改变进入…

JAVA_ARGS="..."

…to…

JAVA_ARGS="... \"-Dhudson.model.directorybrowsersupport.csp.=sandbox allow-same-origin allow-scripts; default-src 'self'; script-src * 'unsafe-eval'; img-src *; style-src * 'unsafe-inline'; font-src *;\""

在Redhat / CentOS上

编辑 / etc / sysconfig / jenkins 通过改变进入…

JENKINS_JAVA_OPTIONS="..."

…to…

JENKINS_JAVA_OPTIONS="... \"-Dhudson.model.directorybrowsersupport.csp.=script-src 'unsafe-inline';\""

在Windows上

在Windows上 there may be a file called 詹金斯.xml in the Jenkins installation where this can be added to the arguments tag:

<arguments>
    -Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle
    "-Dhudson.model.directorybrowsersupport.csp.=script-src 'unsafe-inline';"
    -jar "%BASE%\jenkins.war" --httpPort=8080
</arguments>
摘要jenkins.xml.

验证当前内容安全策略

要验证当前内容安全策略转到 管理Jenkins. -> 脚本控制台 并输入控制台以下命令:

println(System.getProperty("hudson.model.directorybrowsersupport.csp."))