下载
第3章JDK1.2安全结构使用
21
优先级下运行.这样使沙盒模型只适用于下载的applet.然后,不应该赋予本地安装的软件对系统中所有部分的访问权力.例如,一个用户在本地安装了Demo版的程序并试着运行它,如果赋予这样的一个Demo版程序享有最高访问许可权,则会引起一些潜在的危害.又如,将applet存储在本地文件系统中会改进性能,但是不应该把applet视为可靠的代码并改变安全模型,即使这些applet已存在于本地系统中.而且,由于存储applet,本地代码和远程代码的区分很快会变得模糊不清.在现代社会的软件组织中,一个应用程序会用到许多组件,如JavaBeans,而它们常常存在于Internet的每一个角落.所以,安全核查应该扩展到所有的Java程序,包括applet和应用程序.在新的结构中,像applet一样,本地代码遇到了同样的安全控制,不过用户可以决定是否给某些(或全部)本地代码赋予最高访问许可权,这样的话,才能像完全被信任的代码一样有效地运用它们.这样一个选择可以通过简单地配置合适的安全策略来完成.3.2.5内部安全机制的脆弱性在最初的JDK1.0和随后的JDK1.1中,一些内部安全机制在时所用的技术是相当脆弱的.尽管它们在这些版本中运行得很好,但维护和扩展它们相当困难.因此,为了降低在程序中产生这些小安全漏洞的危险性,我们作了一些重要的结构性调整.这些工作涉及到对SecurityManager和ClassLoader类的上的修正,和基本访问控制核查机制的修正.下面的3.8和3.9节会谈到一些历史上的细节.3.2.6总结总之,由于需要支持灵活和细致的访问控制的安全策略,同时具有可扩展性和规模可变性,所以需要一种新型的经过改进的安全结构,这就是JDK1.2.这种新型结构使用安全策略来决定赋予它的运行代码何种访问许可权.这些许可权是基于代码特征的.例如,代码源于何处,它是否为数字签名.还有,企图访问被保护的资源会引发调用安全检查,被调用安全检查将比较赋予的许可权和企图访问的许可权.如果赋予的许可权高于或包括企图访问的许可权,访问是允许的.否则,访问被拒绝.如果一个安全策略没有明确地给出,传统的实现于JDK1.0和JDK1.1中的沙盒模型策略为默认策略.随后章节将会谈到对这种模型使用的诸多告戒,精化和异常情况.的确,我们不得不设计新的方法去处理诸多微小的安全事例,而这些安全事例对面向对象系统来说也是独一无二的,但是,JDK1.2安全结构并没有产生新的计算机安全理论,不过,它提供了一个现实的例子,在这个例子中,把众所周知的安全原则应用到工程实践中从而构造了一个实际的,广泛应用的安全系统.本章的其余部分描述了类实现的技术细节.新安全模型中最主要部件包括:安全策略,访问许可权,保护域,访问控制核查,优先级操作和Java类的加载和实施方案.安全策略和访问许可权定义了可允许的行为,而保护域和访问控制核查提供了实际的实施,优先级操作和类加载,实施方案在整个保护机制中提供了很有价值的帮助.
3.3java.Security.GeneralSecurityException
首先,我们要指定一个异常类GeneralSecurityException.也许有人不禁会问,已有
22
使Java2平台安全技术—结构,API
下载
java.langSecurityException类,为何要引入这个类呢?SecurityException类和它的子类是一种运行异常,只在安全核查失败时出现,如一个人非法访问一个被保护文件.这样的运行异常不会被声明也不会被核查,但它们会中断程序运行,除非应用程序员编写了详尽的代码才能捕获它们.尽管如此,其他一些错误情况(如语法错误)与安全机制有关,但却不是失败的安全核查.在这种情况下,执行