从安全性(Security)考虑

来源:互联网 发布:骨灰盒尺寸数据 编辑:程序博客网 时间:2024/05/15 23:51
通过 Internet 自动下载并运行程序听起来就像是病毒制作者的梦想。当你在某个网站上点击
之后,可能会随 HTML 页面自动下载任意数量的东西:GIF 文件、脚本代码、编译过得 Java
代码和 ActiveX 控件。这些东西有些是良性的,例如 GIF 就是无害的,脚本语言能作的事情
也很有限。在 Java 的设计中,applet 也只能运行在受安全保护的“沙盒(sandbox)”中,沙
盒使 applet 无法写磁盘或是访问沙盒之外的内存。


微软的 ActiveX 正好位于走了另一个极端。使用 ActiveX 编程就像对 windows 编程——你可
以随心所欲做任何事。因此如果你点击某页面下载了一个 ActiveX 控件,那么此控件就可能
会破坏你的磁盘上的文件系统。当然,你在计算机上加载的程序如果不被限制运行在 Web
浏览器内部,就也有可能造成这样的破坏。下载自 BBS 的病毒长久以来一直是一个严重的
问题,Internet 迅猛的发展速度更是加剧了这个问题。


“数字签名(digital signature)”看起来像是一种解决方案,凭此签名可以检验代码以确定代
码的作者。这种做法基于这样的思想:病毒能够发作是因为它的创建者可以匿名,因此如果
消除匿名行为,那么就可以强制每个人都要为自己的行为负责。这看起来是一个不错的计划,
因为它使得程序更加实用,但是我怀疑它是否真的能根除恶意的祸害。而且,如果程序中存
在非故意的破坏性 Bug,那么它仍然会引发问题。


Java 的方法是通过沙盒来防止这类问题的发生。存在于本地浏览器中的 Java 解释器在加载
applet 的时候检查其是否含有不恰当的指令,特别是,applet 不能往磁盘上写文件或从磁盘
上删除文件(这正是病毒赖以生存与发作的基础)。Applet 通常被认为是安全的,而这正是
可靠的客户/服务器系统的要点所在,所以在 Java 语言中的任何可能会滋生病毒 bug 都会被
快速修复。(值得注意的是,浏览器软件事实上都会强制执行这些安全限制,某些浏览器甚
至允许你选择不同的安全级别,以提供不同级别的系统访问能力。)


你可能会质疑,不能向本地磁盘写文件的限制是否过于严苛。例如,你可能想构建一个本地
数据库或存储数据以备在稍后下线之后仍能使用。尽管人们最初的梦想是最终要让所有人都
可以在线进行所有重要的工作,但是很快这个梦想就被证明是不切实际的(尽管有朝一日,
低成本的网络设备可以满足绝大多数用户的需要)。“签名 applet”是问题的解决方案之一,
它们使用公钥加密(public-key encryption)来验证 applet 是否确实来自于它所宣称的来源。
虽然签名 applet 仍然可能会毁掉你的磁盘,但是既然你现在已经让 applet 的创建者负责任,
那么他们就不会有恶意的行为。Java 提供了一个数字签名(digital signature)的框架,因此,
如果需要的话,你最终是可以让 applet 步出沙盒之外的。第 14 章包含了一个怎样对 applet
签名的例子。


此外,Java Web Start 也是一种相对比较新的,用来便捷地部署不需要在 Web 浏览器中就可
以独立运行的程序的方法。这项技术在解决许多与“在浏览器内部运行程序”相关的客户端
问题方面很有潜力。Web Start 程序可以是签过名的,或者是在每一次执行有可能危及本地
系统的操作时,向客户端索要相应的权限。第 14 章有一个简单的例子以及有关 Java Web Start
的解释。


数字签名遗漏了一个重要的问题,那就是人们在 Internet 上游荡的速度。如果你下载了一个
有问题的程序,并且这个程序执行了某些不恰当的动作,那么需要多久你才能发现它造成的
损害呢?也许是数天,甚至是数周。到那时,你怎样才能追踪到是这个造成损害的程序呢?

你又怎样才能知道在那时它干了哪些好事呢?