因为文档的框架已沙箱化并且未设置“允许脚本”权限

问题描述 投票:0回答:2

我编写了一个程序,生成带有此标头的 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"> 

但正如你在我的打印屏幕中看到的那样,这没有帮助

任何想法,我该如何解决这个问题?

html css google-chrome jenkins
2个回答
6
投票

您正在从 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';")

另一种解决方案是将生成的页面发布(部署)到另一台服务器上,您可以在其中控制内容安全策略。


0
投票

让我详细说明 Dave 的解决方案建议“另一个解决方案是在另一台服务器上发布(部署)生成的页面,您可以在其中控制内容安全策略。”

我们遇到了与OP相同的问题,并通过为同一服务器生成第二个单独的子域/DNS条目来解决它,即

www.domain.com -- original jenkins
static.domain.com -- jenkins static delivery

在 Jenkins -> 管理 -> 系统中,转到“从另一个域提供资源文件”并将“资源根 URL”设置为 static.domain.com。

现在问题确实消失了,我们可以从 Jenkins 轻松发布 HTML 报告。

© www.soinside.com 2019 - 2024. All rights reserved.