![[ 永远的UNIX::UNIX技术资料的宝库 ]](/images/title.gif)
|
| 首页 > 安全技术 > 程序 > 正文 |
 |
| Java 的安全性 |
| 本文出自:http://www.cert.org.tw 作者: (2001-11-01 07:00:00) |
Java 电脑语言在全球资讯网上的崛起,又使得在 Internet 上做生意的安全情况
有了另外一个截然不同的注视焦点。在没有像 Java 这种电脑语言来写Internet
上的应用程式之前,全球资讯网上的交易主要是靠 HTML 之中的表格来进行的。
在使用这种表格填上信用卡的号码去购物之前,比较谨慎的浏览器都会提出一个不
安全的警告信号,这主要是因为所有用 HTML 表格所传送的资料,在网路上都是以
明码传输的,这些明码很容易被人盗取来做非法的用途。
用 Java 电脑语言所写成的 applet 可以做出比 HTML 表格还要杂上几百倍的资
料处理工作,例如将使用者输入的重要资料转变成非常不易破解的密码以後,再交
到Internet 的网路上传递,使宵小就算是盗取到了资料,也只是一堆无法识读的乱
码而已,不能用来为非作歹。除此之外,Java 电脑语言能让 Internet 上的运算模
式接近企业的主从运算环境,而且它又有不受客户端作业系统平台限制等的种种优
点,这些长处使得 Java 变成最热门的电脑语言。
一个让 Java 能如此受欢迎的主要原因之一是它的 secure (安全性). 简单的
说来,就是访客不能够写任何资料进你网站上的 Java Applet 档, 无法由你的
网站透过 Java Applet 进入你的主机删除你的档案; 甚或是偷到主机上客户
的信用卡号码.Java 是用 sandbox 的概念管理这些事情. 当 Java Applet 被
限制在 sandbox 里执行时, 有一些事情是 Java Applet 无法透过浏览器来处
理的. 例如 Java Applet 不能读,写, 删除以及更改主机内的档案名称. 它们
也不能产生档案,也无法检查某个名称是档案名称或是档案夹名称.
Java 在安全上的层层防
Java 电脑语言的设计人员深知安全问题是上 Internet 的最大隐忧,因此在设计这
个要在全球资讯网上运作的语言时,就将层层地安全保护措施放到 Java 之中,以
免程式设计师在用 Java 去开发全球资讯网上的程式应用时,有意、无意、故意或
恶意地破坏了客户端电脑环境的安全,同时也要防止宵小利用 Java 的 Applet 来
胡作非为。
这些层层的安全保护措施可以分成四层:第一层确定 Java 电脑语言简单安全;第
二层确认所载入要执行的程式正确;第三层确保Applet执行时的行为规矩;最後一
层则确切保护客户端执行环境的安全。
在电脑语言方面,Java 把令程式设计师头痛的 pointer 运算删除了;很多可以用
不同方法去达成的工作简化成只能用一种方式来做。程式设计师固然少了一些可以
用来耀朋侪的特殊程式写作方法,但同时也减少了程式设计师因语言的难度而犯
错误的机会。在程式编译的时候,Java 的程式编译器会将一些在语法上不安全的错
误抓出来,以确保原始程式码不违反安全的守则。
Java 的程式是先编译成位元码(bytecode),然後再下载到客户端的电脑上解译执
行的。为了要确定所欲执行的程式的确是经过 Java 的编译器所编译出来的,而且
要确保这些要被执行的 Applet 没有被人动过手脚,因此在程式解译执行之前,都
要先经过一番检查确认的手续,在所有的程式码都被仔细地检查过以後,才开始执
行程式的运算工作。
在程式开始执行以後,Java 的解译器也是步步为营地防止 Applet 程式有出轨的行
为,例如运算矩阵时超出事先预定的矩阵围,或是要越界去撷取其他物件中的资
料等不轨的行为,都会产生执行时的错误信号,并马上中止程式的运转。而且从不
同地方所载入的类别程式分存放在不同的名字隔间之中,不会和原始的类别程式混
淆不清。
Applet在客户端的电脑上执行时,除非事先经过组态配置的设定,它是不允许去更动
客户端的电脑环境和档案的,它也不容许Applet去读取客户端的档案资料,更不能执
行客户端的现有程式。Applet 只能和自己的 Web 伺服器互通讯息,而不能任意地和
网路上的其他电脑互通款曲。这些严格地限制是要确保从远方来的 Applet 在执行时
,不会对客户端的电脑造成伤害,也不会将电脑病毒传播进来。
由於 Java 编程语言本质上是面向对像的,因此我们确信开发人员将会从一套对像级保护
机制中获益,这套对像级保护机制:(1) 超越了 Java 编程语言提供的固有保护,(2) 补
充了基於线程的访问控制机制。
一个可能有用但现在尚未实现的概念是“子域”。子域是包含在另一域中的域。子域的权限
或特权不会比将其作为元件的域所拥有的更多。例如,可以创建域来有选择地进一步限制应
用程式可以做的事情。通常认为域支援继承:除在有些情况下父域进一步显式地限制了子域
外,子域将自动继承父域的安全属性。如果引入了信任程式码的概念,则通过适当的权利放
大来放松子域是可能的。
为方便起见,我们可以认为系统域是一个所有系统程式码的大集合。但是,为了更好地进行
保护,系统程式码应该在多个系统域中运行,其中每个域保护特定型态的资源,同时得到一
套特殊权限。例如,如果文件系统程式码和网路系统程式码在不同的域中运行,其中前者没
有访问网路资源的权限,而後者没有访问文件系统的权限,则一个系统域的错误或安全漏洞
将被最大可能地限制在其围之内。
有时将许多权限放在一个组中并用简称来指称它们较为方便。例如,如果希望名为
“SuperPermission”的权限包括(并隐含)FilePermission("-", "read,write") 和
SocketPermission("*", "connect,accept"),从技术上来说,可通过用 add(添加)
方法添加所需权限来用属性 Permissions 或相似的属性来实现此超级权限。这种分组
可以任意杂化。 为理解当给出这样的超极权限时实际上已授予哪些权限,需创建一个
固定且已命名的权限类来代表静态指定的权限组,或在策略文件中清楚地说明成员权限。
其次,处理策略(文件)会更加杂,因为分组权限可能需要扩展。此外,分组权限的嵌
套进一步增加了杂度。
道高一尺,魔高一丈?
虽然 Java 在设计时已经放入了重重严密的关卡,但是在实务上是不可能把所有在
安全上的漏洞完全杜绝的。例如,上述的第二层到第四层安全防护措施主要是靠在
客户端浏览器下面执行 Java Applet 的虚拟机器(JVM)和 Java 的一些基本的类
别程式库来把守的,如果采用被人动过手脚的浏览器,则这些 Java 的层层客户端
安全措施就很可能无法发挥效用了。
最近Internet 上管理安全的几个单位就发出两则和 Java 有关的安全警告:其一
是电脑骇客(hacker)可以透过 Applet 并利用一些在 TCP/IP 及目录服务(NDS)
上的弱点,绕过 Internet 的防火墙;另一则是透过 Java 的组态改变,骇客可以
把类别程式像伏兵一样地预藏在客户端的电脑中,以便日後开门揖盗。虽然这两个
漏洞已被新版本的 NetScape 和新版本的 Java 开发工具箱(JDK)将它们堵塞起
来了,但是这也展示了 Java 不能完全阻挡无孔不入的骇客和宵小的侵袭。
除此之外,一些传统上电脑安全的漏洞,Java 也是无法加以防的:例如骇客可以
用试错的方法去破解电脑使用者的密码;或是利用类似木马屠城的手法,骗取电脑
使用者信用卡号码之类的机密资料等等,都不是任何一个电脑语言可以防的。
对於全球资讯网上的用户而言,如欲在网路上购物时,一定要本着「防人之心不可无
」的心情,小心谨慎地处理自己的机密资料,以免被歹徒盗用。对欲在 Internet 上
安心做生意的公司而言,在电脑安全上还是有很长的一段路要走的,在 Internet 上
最新的安全动态和安全工具更是要随时留意。
Java Security 相关的 FAQ ?
请参考底下网页:
http://java.sun.com/docs/books/tutorial/applet/security/capabilities.html
http://java.sun.com/sfaq/index.html
http://java.sun.com/products/jdk/1.1/docs/guide/security/
(http://www.fanqiang.com)
进入【UNIX论坛】
|
|
| 相关文章 |
|
|
|
|
 |
★ 樊强制作 欢迎分享 ★ |