我正在开发一个用于演示目的的本地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>
答案 0 :(得分:4)
为什么IE会将文件系统中的文件视为安全风险?
历史原因。
当微软提出网络安全区域的想法时,他们最初认为包含本地文件系统的“我的电脑区域”比互联网区更受信任。
这几乎听起来像是一件明智的事情,除了(a)用户希望他们下载的网页在从硬盘上运行时不会获得一定的权限,以及(b)许多程序从互联网上下载文件并将它们放在一个可预测的位置...所以如果你能说服他们下载一个HTML文件,那么你就是要让他们将特权脚本注入我的电脑区。
“我的电脑专区”的原始设置是允许ActiveX控件在没有提示的情况下安装和运行。这意味着如果你可以在文件系统上获得一些HTML,那么你本质上就有一个执行任意代码安全漏洞。有很多的网络漏洞攻击利用它作为其感染机制的一部分来加载恶意软件。
微软担心,对“我的电脑区域”安全设置的任何更改都会破坏使用Web浏览器控件将其自己的HTML内容作为其UI的一部分呈现的应用程序。因此,Web浏览器控件默认为现有设置,并且邀请使用它的IE等浏览器启用“本地计算机锁定”模式,这将删除默认情况下My Computer Zone页面获得的额外权限。 IE默认启用此功能。
不幸的是,在经典的过度反应中,“本地机器锁定”不仅与Internet区域具有相同的权限级别,而且更具限制性 - 阻止JavaScript和ActiveX。这打破了用户保存到硬盘的页面,因此要解决这个问题,IE会为它下载的页面添加标记,以允许它们逃脱(以前的特权,现在受限制的)我的计算机区域并被视为普通的Internet区域页面。
这是Mark of the Web,您可以将其包含在静态文件中,以使它们也能正常运行。
当然,这使得本地机器锁定的额外限制完全没有意义,因为任何文件都可以选择退出。
但是现在整个事情完全没有意义,因为从那时起,本地机器区域的默认设置已经改变,现在更接近Internet区域,不允许任意ActiveX。所以这很复杂,增加了复杂性,无论如何都没有收获。