分享

JS的安全性

 天行健861010 2012-02-21
虽然JavaScript有安全性的诟病,但是其中很多是在早期发现和解决了的。实际上JavaScript的安全性已逐步提高,例如对某些兼容性支持的放弃、受限功能、“同源”策略、安全区域以及签名脚本。只有Netscape Navigator过去对数据感染安全性模型的实验是个例外。让我们看看这些功能是如何提高JavaScript的安全性的。

浏览器有不同的安全漏洞

JavaScript的跨浏览器和跨平台特性并不是真正的安全性问题。通过某些修改,在一台苹果电脑的Internet Explorer运行的脚本也可以在一台PC的Netscape上运行。但是对开发来说曾经很困难的平台和浏览器之间的差异同样意味着各种浏览器具有不同的安全漏洞。因此当一个恶意的脚本在Netscape上引发问题的时候,它也许在Internet Explorer、Opera以及Mozilla上失败。

如今,浏览器变得单一,就如同一个村庄的每个农夫都种植同一品种的农作物一样。只要一种单一的农作物疾病就肯定会毁掉整年的全部收成,使这个村庄陷入饥荒。这是一个比较简单的比喻,但是想想,在我妻子Dell机的Windows XP上运行的一个脚本会在她母亲的XP和Windows 98以及我Toshiba电脑的Windows 2000 Server上运行。幸运的是,虽然看起来好像JavaScript完全缺乏安全功能,但实际并不是这样。JavaScript其实拥有一定数量的安全功能。


数据感染安全性模型

Netscape Navigator 3引入了数据感染这个并不长久的概念。当被打开时,数据感染允许一个浏览器窗口察看另一个窗口的属性,而不管该窗口是从哪个服务器装载的。第二个页面的开者需要标记哪些属性在哪里被感染,并不能能传给服务器。虽然是个有趣的主意,但是它需要防御的代码,而且客户端必须允许数据感染。


 

最为客户端的JavaScript安全性的一个重要部分就是有很多事不能做。没有访问客户端文件、查询客户端网络连接、执行操作系统命令或程序的对象。有些时候缺少这些功能很恼人,但是它却避免了铺天盖地的问题。

限制功能

限制功能

只要最近在父浏览器窗口中试过执行self.close()的人就知道JavaScript会停止执行一些恶意的代码。但Web还很年轻并且JavaScript还很新的时候,一些人以关闭访问者的浏览器窗口为娱乐。几个月之后,父浏览器窗口的self.close()就成为了一个受限功能。

实际上,JavaScript中有许多受限功能。包括访问浏览器的历史记录、上载文件、提交、发送邮件、改变菜单栏、在一边打开一个会被用户忽视的小于100像素的窗口。

同源策略

脚本只能读取和修改同源文档的属性。这种同源策略也涵盖端口和协议。所以,如果一个脚本的源端口是80并且协议是HTTP,那么就不能操作源为端口21及FTP协议的文档。这种限制逻辑是为了避免信息泄漏。设想我是一个不怀好意的家伙。如果没有同源策略,只要我的脚本在运行,我就可以提取任何另一个浏览器窗口中的信息并使用XMLHTTP或另一个方法将其发往我自己的Web站点。当然大多数的信息是无用的,但是也可能包含信用卡号等。这就看你数据挖掘的本事了!

同源策略不仅应用于文档,而且应用于浏览器cookie集。这防止那

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多