违反代码审查HTML的内容安全策略



我正在为我的rust项目生成代码覆盖率,并试图使用publishHTML将结果发布给Jenkins。一切都很好,除了当我试图查看HTML时,由于这个错误,CSS没有加载:

Refused to load the stylesheet 'https://cdn.jsdelivr.net/npm/bulma@0.9.1/css/bulma.min.css' because it violates the following Content Security Policy directive: "default-src 'self'". Note that 'style-src-elem' was not explicitly set, so 'default-src' is used as a fallback.

我该如何解决这个问题?我怀疑我是第一个遇到这种情况的人。

我确实想过重写生成的HTML以使用本地样式表,但我在Jenkins工作区遇到了奇怪的访问权限,我无法实现这一点。

这是我正在使用的生成报告的命令:

grcov . --binary-path workspaces -s . -t html --branch --ignore-not-existing -o ./code_coverage/

如果能就如何解决这个问题或如何更好地部署我的结果提出任何建议,我将不胜感激。

Jenkins中的默认CSP标头为:

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

所以您必须将https://cdn.jsdelivr.net/npm/(或https://cdn.jsdelivr.net(添加到style-src指令中。

您可以使用初始化后脚本(inithook(在Jenkins启动后立即运行一些附加的东西。创建一个文件,例如$JENKINS_HOME/init.groovy.d/adjust-content-security-policy.groovy(或$JENKINS_HOME/init.groovy.d/目录中的任何.groovy文件(,其中只有一行:

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; default-src 'self'; img-src 'self'; style-src 'self' https://cdn.jsdelivr.net/npm/")

它将在詹金斯开始之后执行。

请注意请注意,"style-src-elem"未显式设置,因此"default-src"在违规消息中用作后备。这意味着默认的Jenkins CSP已更改,并且缺少style-src指令。因此,检查$JENKINS_HOME/init.groovy.d/目录中的文件,也许您已经有了一个具有CSP设置的文件
最安全的方法是在浏览器控制台中查看您拥有的CSP标头,将style-src 'self' https://cdn.jsdelivr.net/npm/"添加到其中,然后将生成的CSP设置到System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "...")中。也许詹金斯的文件只是落后于时代。

如果在Windows上运行jenkins,有一种方法可以使用jenkins.xml文件。添加属性:

-Dhudson.model.DirectoryBrowserSupport.CSP="sandbox; default-src 'self'; img-src 'self'; style-src 'self' https://cdn.jsdelivr.net/npm/"

-jar之前的<service><arguments>中重新启动服务。查看此处和此处的详细信息。

最新更新