试图更好地理解 Chrome 和 Firefox 之间的跨域处理差异

Posted

技术标签:

【中文标题】试图更好地理解 Chrome 和 Firefox 之间的跨域处理差异【英文标题】:Trying to better understand cross-origin handling difference between Chrome and Firefox 【发布时间】:2017-03-08 22:35:47 【问题描述】:

背景

我最初想为我的应用程序创建文档作为磁盘上的简单本地 html 文件。为了达到这个目的,文档被认为是按如下方式组织的:

doc
├── index.html
└── resources
    ├── includes
    │   ├── part1.html
    │   ├── part2.html
    │   └── part3.html
    └── scripts
        ├── makedoc.js
        └── jquery-3.1.1.min.js

因此,当单击index.html(或通过我的应用程序中的open 命令)时,文档可以简单地在默认网络浏览器中打开。而index.html 只是被认为是一个容器,可以帮助将文档分解成更小的partxx.html 部分:

<!DOCTYPE html>
<html>
<head>
  <script src="./resources/scripts/makedoc.js"></script>
  <script src="./resources/scripts/jquery-3.1.1.min.js"></script>
  <script>$(document).ready(function()  replaceBodyParts(); </script>   
</head>
<body>
  <div replaceWith="./resources/includes/part1.html"></div>
  <div replaceWith="./resources/includes/part1.html"></div>
  <div replaceWith="./resources/includes/part3.html"></div>
</body>

只需使用replaceBodyPartsjQuerydiv 替换为真实内容+ 自动编号部分等...

问题

在 Firefox(版本 49.0.2)中打开文档时,没有问题,太好了! ... 在 Chrome (version54.0.2840.71 m) 中打开文档时,出现以下错误:

跨源请求仅支持协议方案:http、data、chrome、chrome-extension、https、chrome-extension-resource

问题

在阅读了other threads 关于此我清楚地了解从外部域访问本地文件系统的安全问题。我的问题更多的是为什么它在 Firefox 中有效,而在 chrome 中无效(即使是最近的版本):

这是否意味着Firefox更聪明地理解index.html在本地打开,没有跨域问题? 或者这是否意味着 Firefox 在这一点上不如 Chrome 安全?

注意:我对实例化本地 Web 服务器或更改 chrome 设置等解决方案不感兴趣。这是用户应该能够简单地打开的本地文档(即使它迫使他们使用 firefox 而不是 chrome 来阅读它——或者如果它迫使我放弃拆分文档的想法是小部分——)。

【问题讨论】:

【参考方案1】:

Firefox 显然不太安全,它故意允许 Chome 锁定某些东西。 (具体来说,当 HTML 文件也是本地文件并且位于用户文件系统的相同或更高目录中时,Firefox 允许在 HTML 页面中运行的脚本读取本地文件。Chrome 只是全面禁止从文件系统读取。 )。

这是否是应该得到保护的东西在很大程度上是关于便利性和功能性的相对优点与某人设法设计一个可以被利用的情况的可能性的意见问题。 p>

Firefox 和 Chrome 的开发者在这方面显然有不同的看法。

【讨论】:

因此,您清楚地表明,通过检测初始 url 为 file://c:/.../doc/index.html,firefox 并没有特别绕过 cross-origin ...这对我来说意味着即使安装在服务器上的 firefox 也会仍然允许在我的本地文件系统上发出获取请求.. oO ? @CitizenInsane — 什么?不,我以为你的问题是“为什么 Firefox 和 Chrome 的规则不同?”不是“Firefox 和 Chrome 规则有什么区别?” (在答案中添加了一些解释) 感谢您在回答中澄清 Firefox 仅在一切都在本地时才允许这样做......在这种情况下,我看不到任何可能是可以被利用的安全问题的情况,但是也许仅仅制定全面禁令会更好地真正避免在其他情况下可能会出错的绕过。 想要访问某人下载文件夹中的内容?将他们指向带有 HTML 文档和 content-disposition: attachment 的 URL,并假设他们会点击下载的文件。想要访问磁盘上其他地方的东西吗?只需要一些社会工程来让他们移动它。它是一个 HTML 文件。一定很安全吧? 嗯......我明白了......感谢这个例子,因为它可以在哪里使用。

以上是关于试图更好地理解 Chrome 和 Firefox 之间的跨域处理差异的主要内容,如果未能解决你的问题,请参考以下文章

试图更好地理解 VITERBI 算法

试图更好地理解 Item 的用法?

如何使为 Firefox 浏览器开发的网站与 Safari 和 Chrome 兼容?

Safari和Chrome中的视频呈现比Firefox更亮一些

Android 上的 Chrome 和 Firefox 错误地呈现伊特鲁里亚字母(翻转,但从左到右书写)

选项(失败)仅在 Chrome 和 Firefox 上