【问题标题】:Chrome "Unsafe attempt to load URL" on same Domains, protocols and portsChrome 在相同的域、协议和端口上“不安全地尝试加载 URL”
【发布时间】:2016-11-15 14:00:46
【问题描述】:

在 Chrome 中,当我尝试访问下面错误中显示的 xml 链接时,我收到此错误。

不安全地尝试从 URL http://build:8080/view/application/job/Project/Report/SourceMonitor-details.xml 的框架加载 URL http://build:8080/view/application/job/Project/Report/SourceMonitor.xslt。域、协议和端口必须匹配。

据我所知域,协议和端口是相同的。
这些文件都托管在 Jenkins CI 网络服务器上,所以不是因为它是本地文件。
当我在 Internet Explorer 中打开 xml 文件时,它可以工作。
xml 文件使用如下所示的 xml 标记链接到 xslt。

<?xml-stylesheet type="text/xsl" href="SourceMonitor.xslt"?>

我在这里错过了什么?

【问题讨论】:

    标签: html xml xslt jenkins content-security-policy


    【解决方案1】:

    我在没有内部 Jenkins 基础架构的情况下偶然发现了同样的问题,但是通过根据其文档运行 Jenkins Docker 映像并通过管道作业生成 XSLT 文件和引用该 XSLT 文件的 XML 文件,它很容易用 Jenkins Docker 映像重现.通过 Node Allocate node : Start 中的工作区文件夹打开 XML 将失败,Chrome 将输出问题所述的错误。

    这不仅限于 Chrome,因为 Firefox 也会报告错误,看起来像:

    加载样式表时出错:加载 XSLT 样式表时出现网络错误http://build:8080/view/application/job/Project/Report/SourceMonitor.xslt

    解决这个问题需要配置 Jenkins 使用的内容安全策略 (CSP)。此处解释了内容安全策略的工作原理:Stackoverflow: How does Content Security Policy work?

    Jenkins 的默认 CSP 配置非常严格,不允许从引用它的文档加载 XSL 文件。 Jenkins wiki 页面上记录了默认 CSP 配置以及如何更改它。

    根据 CSP 文档(CR-CSP-20121115 第 4.2 章 script-src)XSL 样式表被视为脚本,我必须在默认配置中添加 script-src 'self';sandbox allow-same-origin; 以使简单的 XSL 样式表工作.我通过 Jenkins Script Console 运行:

    System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","sandbox allow-same-origin; default-src 'none'; img-src 'self'; style-src 'self'; script-src 'self';")
    

    使用System.setProperty 会临时更改 CSP,直到下次重新启动,所有这些都记录在 Jenkins wiki 页面上。

    查找 Chrome 或其他浏览器报告的任何进一步错误,因为 XSLT 文件中的内容可能还要求您放宽其他 CSP 规则,例如允许解释样式标签。

    【讨论】:

      猜你喜欢
      • 2012-07-19
      • 2012-05-21
      • 2011-10-19
      • 1970-01-01
      相关资源
      最近更新 更多