Java 语言安全与安全管理器深度解析
1. Java 语言规则的执行
Java 语言规则在理论上是完善的,但需要在开发和部署的不同阶段进行执行,以确保程序的安全性。这些阶段包括编译时、链接时(类加载到虚拟机时)和运行时。
1.1 编译器执行
Java 编译器负责执行大部分语言规则,但无法执行数组边界检查和所有非法对象转换的检查。例如,编译器可以检测并阻止以下明显的非法对象转换:
Vector v = new Vector();
String s = (String) v;
然而,对于将类型 X 的对象转换为类型 Y(Y 是 X 的子类)的情况,编译器无法在编译时确定其有效性,因此会允许此类构造通过。
1.2 字节码验证器
字节码验证器是执行 Java 语言规则的重要环节。它独立于程序的原始源语言,即使是由 C++ 编译器生成的 Java 字节码,也能进行验证,但验证依赖于 Java 语言的语义。
1.2.1 为什么需要字节码验证器
通常讨论字节码验证器的必要性时,会提到“恶意编译器”的概念,但实际上,使用标准 Java 编译器也很容易创建不符合规范的 Java 代码。例如:
package javasec.samples.ch03;
public class CreditCard {
public String acctNo = "0001 0002 0003 0004";
}
packa
超级会员免费看
订阅专栏 解锁全文
10万+

被折叠的 条评论
为什么被折叠?



