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