,也即校验类文件是否完整,是否被截去一部分或者被添加。类文件校验器还要检查类是否遵循Java语言的规定,如除了Object类,所有的类都必须有1个父类等。 2.字节码校验 一旦类文件校验器成功地完成格式和内部一致性的检查,就开始对字节码进行校验。通过对代表类方法的字节码流进行数据流分析,进行操作码是否有效及操作码是否有有效的操作数等的检查,以验证字节码流是否可以由虚拟机安全执行。 1.3.2符号引用的校验 符号引用是给出了引用项的名字和其它信息的字符串,这些信息足以用来区分类、域或方法。符号引用的校验用来验证引用是否有效,如果引用无效(例如,如果类不能载入,或者类存在但不含有要引用的域或方法),类文件校验器就会抛出1个错误。 1.4 安全管理器和JAVA API 安全管理器定义了“沙盒”的外部边界。安全管理器是类java.lang.SecurityManager的子类,它是自定义的。 JAVA API类在采取一些行动时,通常需要安全管理器检查这个行动是否安全,这些行动包括: 1.接受来自于特定主机的socket连接。 2.修改线程(改变线程优先级,结束线程等)。 3.开放对于特定主机的socket连接。 4.创建1个新的类载入器。 5.删除特定的文件。 6.创建新的过程。 7.程序退出。 8.调用含有本地方法的动态库。 9.等待连接。 10.从特定的包载入类。 11.给特定的包中添加1个新类。 12.访问或修改系统特性。 13.访问特定的系统特性。 14.读文件。 15.写文件。 由于在执行上述动作前需要安全管理器进行检查,JAVA API不执行安全管理器建立的安全措施所禁止的任何动作。 JAVA API执行1个可能不安全活动的过程,通常分为2步:首先,JAVA API代码检查安全管理器是否已安装。如果没有安装,就无法进行第2步的检查,则直接执行可能不安全的代码;如果安装了,就继续执行第2步的检查,调用安全管理器中合适的检查方法对动作进行检查,如果动作被禁止,检查方法上一页 [1] [2]
|
|