【问题标题】:IE9 local filesystem security prevents js executionIE9本地文件系统安全阻止js执行
【发布时间】:2013-06-15 19:19:12
【问题描述】:

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

当我在 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>

【问题讨论】:

    标签: javascript security internet-explorer-9 localhost


    【解决方案1】:

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

    历史原因。

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

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

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

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

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

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

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

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

    【讨论】:

    • 内容丰富、有用且有趣。我想我有时会忘记 IE9 仍然是 IE,具有所有的遗产。
    • 感谢您的信息。我有这个完全相同的场景,我看到了相同的结果。我已经尝试过您添加网络标记的建议,但没有帮助。这里有解决办法吗?
    • @GregoryKuhn:Mark of the Web 确实修复了它,但你必须小心将它添加到正确的位置(紧跟在任何文档类型之后),具有正确的内联长度,并且——最容易出错的地方人们起来——使用 Windows CRLF 行结尾,而不是普通的 LF。
    • @bobince 感谢您的回复。我曾尝试添加这样的 MOTW:&lt;!DOCTYPE html&gt; &lt;!-- saved from url=(0014)about:internet --&gt; &lt;html&gt; 在 IE 中,页面显示区域设置为 Internet |保护模式:关闭。我正在使用库 D3,但仍然从 d3 javascript 库中收到 SCRIPT5: Access is denied. 错误。具体来说:这里:xhr.send = function(method, data, callback) { if (arguments.length === 2 &amp;&amp; typeof data === "function") callback = data, data = null; request.open(method, url, true); 我也在使用正确的行尾。
    • @GregoryKuhn:好的,这是一个不同的问题,而不是特定于 IE。您正在尝试从文件系统源到远程站点源执行跨站点 XMLHttpRequest,由于存在 XSS 安全风险,因此被阻止。 MotW 中的 URL 实际上并没有让您进入该站点的来源,它只会切换到 Internet 模式(所以是的,这毫无意义)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 2012-10-31
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2017-09-30
    • 2018-08-27
    相关资源
    最近更新 更多