为什么file://路径始终被视为跨域?

时间:2017-03-07 21:02:39

标签: html cross-domain

为什么不能像

这样的本地网页
file:///C:/index.html

发送资源请求

file:///C:/data.json

这是因为它是一个交叉来源请求,但是以什么方式交叉来源?我不明白为什么这是一个漏洞/被阻止。当我想为JavaScript / HTML中的某些东西添加一个快速的实用程序时,它似乎是一个巨大的痛苦,我无法上传到某个服务器,因为这看似任意的限制。

3 个答案:

答案 0 :(得分:3)

HTML文件应该是安全的"。诱骗人们将HTML文档保存到他们的硬盘驱动器然后打开它并不困难(在这里,只需打开附加到此电子邮件的HTML文件将导致许多电子邮件客户端自动将其保存到{{ 1}}目录并在默认应用程序中打开它。

如果该文件中的JavaScript有权读取磁盘上的任何文件,那么用户将非常容易受到攻击。

与Microsoft Word之类的软件在允许运行宏之前提示的原因相同。

答案 1 :(得分:2)

它可以保护您免受从硬盘驱动器读取的恶意HTML文件的侵害。

在真实服务器上,您(希望)不会提供任意文件,但在本地计算机上,您可以非常轻松地诱骗用户加载任何您想要的文件。

答案 2 :(得分:1)

浏览器设置了安全措施,以确保普通用户不会面临更高的风险。想象一下,我是一个恶意网站,我让你下载一些东西到你的文件系统,看起来像一个普通的网站。想象一下,下载的HTML可以访问文件系统的其他部分,然后通过AJAX或者此软件包附带的文件系统上的另一段可执行代码将该数据发送给我。对于普通用户来说,这可能看起来像一个普通的网站,只是开放有点奇怪,但我仍然可以使用它。"如果浏览器阻止了这一点,他们会更安全。

可以关闭这些标志(如此处:How to launch html using Chrome at "--allow-file-access-from-files" mode?),但对于知识渊博的用户("高级用户"),可能更多附带有关于您的浏览会话安全性的某种警告。

对于你正在谈论的那种场景,你应该能够启动某种类型的本地HTTP服务器 - 可能使用Python,Ruby或node.js(我想node.js将是一个测试javascript基础应用程序的有吸引力的选项。)