2

我正在为演示目的开发一个本地 JavaScript webapp。webapp 由一个 HTML 页面和一些 JS 文件组成,这些文件<script>使用<head>.

当我在 FF 或 Chromium 上运行此文件(从 Windows 上的本地文件系统)时,一切正常 - 应用程序运行良好。

当我在 IE9 中运行它时,出现“Internet Explorer 限制此页面运行脚本或 ActiveX 控件”,并且应用程序无法正确加载。单击“允许内容”并没有太大帮助,因为该应用程序已经是火车残骸了。

当我托管本地网络服务器时如何

python -m http.server 8888

并将 IE 指向它 - 一切正常。

因为这是一个公司设置,所以我对更改安全设置不感兴趣。

我已经通过将这些文件发送到服务器来解决这个问题,但问题仍然存在:为什么 IE 将文件系统中的文件(甚至在同一目录中)视为某种跨站点请求或安全风险?

PS。奖金 WTF:打开带有开发人员工具的页面时,一切正常。

编辑:如果你在徘徊:我确实添加了一个结束脚本标签。

<script type="text/javascript" src="vendor/d3.v3.js"></script>
4

1 回答 1

4

为什么 IE 将文件系统中的文件视为安全风险?

历史原因。

当微软提出网络安全区域的想法时,他们最初决定包含本地文件系统的我的电脑区域比 Internet 区域更受信任。

这听起来几乎是一件明智的事情,除了(a)用户希望他们下载的网页在从硬盘运行时不会获得大量特权,以及(b)许多程序从互联网下载文件并将它们放在在一个可预测的地方......所以如果你能说服他们下载一个 HTML 文件,你就是在说服他们将特权脚本注入我的电脑区。

我的电脑区的原始设置是允许 ActiveX 控件在没有提示的情况下安装和运行。这意味着,如果您可以将一些 HTML 放到文件系统中,那么您基本上就有了一个执行任意代码的安全漏洞。有许多网络漏洞利用它作为感染机制的一部分来加载恶意软件。

Microsoft 担心对“我的电脑区”安全设置的任何更改都会破坏使用 Web 浏览器控件将自己的 HTML 内容呈现为 UI 的一部分的应用程序。因此,Web 浏览器控件默认为现有设置,并且使用它的浏览器(例如 IE)被邀请启用“本地机器锁定”模式,这将放弃默认情况下“我的电脑区域”页面获得的额外权限。IE 默认开启此功能。

不幸的是,在一个典型的过度反应中,“本地机器锁定”不仅与 Internet 区域的权限级别相同,而且更具限制性 - 阻止 JavaScript 和 ActiveX。这破坏了用户保存到硬盘的页面,因此要解决该问题,IE 会在它下载的页面上添加一个标记,以允许他们逃离(以前是特权,现在受限制的)我的电脑区域并被视为正常的 Internet 区域页面。

这是Web 的标志,您可以将其包含在静态文件中以使它们也正常运行。

当然,这使得本地机器锁定的附加限制完全没有意义,因为任何文件都可以选择退出。

但是整个事情现在完全没有意义了,因为从那时起本地机器区域的默认设置已经改变,现在更接近互联网区域,不允许任意 ActiveX。因此,这增加了很多令人困惑的复杂性,却没有任何收获。

于 2013-06-19T11:55:43.223 回答