javascript - IE9 本地文件系统安全性阻止 js 执行

标签 javascript security internet-explorer-9 localhost

我正在开发一个本地 JavaScript Web 应用程序用于演示目的。该 Web 应用程序由单个 HTML 页面和一些 JS 文件组成,这些文件使用 <script> 包含在应用程序中。标签 <head> .

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

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

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

python -m http.server 8888

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

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

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

PS。 Bonus WTF:当打开开发者工具打开页面时,一切正常。

编辑:以防万一您迷惑了:我确实添加了一个结束脚本标记。

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

最佳答案

why does IE treat files from the filesystem [as a] security risk?

历史原因。

当 Microsoft 提出 Web 安全区域的想法时,他们最初认为包含本地文件系统的“我的电脑”区域比 Internet 区域更受信任。

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

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

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

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

这是Mark of the Web并且您可以将其包含在静态文件中以使它们也正常运行。

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

但是现在整件事就完全没有意义了,因为从那时起,本地计算机区域的默认设置已更改,现在更类似于 Internet 区域,不允许任意 ActiveX。因此,这增加了很多令人困惑的复杂性,却没有任何好处。

关于javascript - IE9 本地文件系统安全性阻止 js 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17188146/

相关文章:

javascript - 将多维数组转换为单个数组(Javascript)

javascript - 覆盖console.log(或一般的任何函数): Is there a proper way to do this?

javascript - 如何找出渐变中的所有颜色?

security - 保护 Azure 基础设施

ruby-on-rails - 使用 :attr_accessible with role-based authorization

c++ - 在 C++ 应用程序中嵌入用户名以使登录更容易?

internet-explorer-9 - 尽管在 IE 和更早版本中应用了 border-radius,为什么还要显示 Angular ?

css - ie9 hack @root 更少

javascript - 如何将 JSON 数据显示到动态输入文本字段中?

javascript - 为什么我的IE9不支持canvas?