Chrome在同一个域,协议和端口上“不安全地尝试加载URL”

时间:2016-07-13 06:17:00

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

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

  

不安全尝试从包含网址http://build:8080/view/application/job/Project/Report/SourceMonitor.xslt的网址加载网址http://build:8080/view/application/job/Project/Report/SourceMonitor-details.xml。域,协议和端口必须匹配。

我可以看到,域名,协议和端口是相同的 这些文件都托管在Jenkins CI Web服务器上,因此它不是因为它是本地文件 当我在Internet Explorer中打开xml文件时,它可以正常工作 xml文件使用下面显示的xml标记链接到xslt。

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

我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

我偶然发现了内部Jenkins基础架构存在同样的问题,但是根据其文档运行Jenkins Docker镜像,并通过管道作业生成XSLT文件和引用该XSLT文件的XML文件,可以轻松地重现它。通过节点分配节点中的工作区文件夹打开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 脚本控制台完成的
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规则,例如允许解释样式标记。