我编写了一个程序,生成带有此标头的 html 文件:
但我根本没有
iframe
,更不用说在沙盒中了
当我在浏览器(托管在 Jenkins 服务器上)中打开页面时,我看不到 css。
这些是错误(安全策略)
我看过一些关于stockoverflow的帖子,说
<meta>
应该是这样的:
<meta http-equiv="content-type" content="text/html; charset=utf-8 ;">
<meta http-equiv="Content-Security-Policy" content="script-src 'self' http://onlineerp.solution.quebec 'unsafe-inline' 'unsafe-eval'; style-src 'self' maxcdn.bootstrapcdn.com">
但正如你在我的打印屏幕中看到的那样,这没有帮助
任何想法,我该如何解决这个问题?
您正在从 Jenkins 提供 HTML 页面,因此 Jenkins 控制响应标头,而不是您的内容。 Jenkins 最近的安全修复强加了严格的默认内容安全策略。您应该能够在响应标头中看到 Jenkins 插入的 Content-Security-Policy 标头。
一种解决方案是放宽 Jenkins 配置,请参阅配置内容安全策略 wiki 页面了解详细信息:
Jenkins发送的CSP header可以通过设置系统属性hudson.model.DirectoryBrowserSupport.CSP来修改:
如果它的值为空字符串,例如
那么标头根本不会被发送。java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar jenkins.war
(警告!)这可能非常不安全,只能在检查整体安全设置后使用。
您可以使用 Jenkins 脚本控制台 尝试不同的设置。要启用来自外部站点的 CSS 和图像,您可以使用类似以下内容:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; default-src 'self'; img-src '*'; style-src '*' 'unsafe-inline';")
另一种解决方案是将生成的页面发布(部署)到另一台服务器上,您可以在其中控制内容安全策略。
让我详细说明 Dave 的解决方案建议“另一个解决方案是在另一台服务器上发布(部署)生成的页面,您可以在其中控制内容安全策略。”
我们遇到了与OP相同的问题,并通过为同一服务器生成第二个单独的子域/DNS条目来解决它,即
www.domain.com -- original jenkins
static.domain.com -- jenkins static delivery
在 Jenkins -> 管理 -> 系统中,转到“从另一个域提供资源文件”并将“资源根 URL”设置为 static.domain.com。
现在问题确实消失了,我们可以从 Jenkins 轻松发布 HTML 报告。