【JVM-沙箱】java 安全沙箱模型详解
起到第一道安全保障作用的”双亲委派类加载模型” 双亲委派方式的类加载,指的是优先从顶层启动类加载器开始,自顶向下的方式加载类的模型(参见第一条类装载器体系结构)。 这种模型的好处是,底层的类装载器装载的类无法与顶层类装载器装载的类相互调用。 哪怕是同包下的类,只要他们不属于同一类装载器,都是相互隔绝的。这对一些有安全隐患的类起到了安全隔离的作用。使它不能冒充系统类来破坏程序正常运作。 此外,不同的类装载器,也有自己的类装载范围。比如启动类装载器,它只会装在jdk/lib目录下的包/类,因此,系统级的类是相对安全的。 class** 文件校验器,通过四趟扫描,保证了class文件正确** 第一趟是,检查class文件的结构是否正确。比较典型的就是,检查class文件是否以魔数OxCAFEBABE打头。 通过这趟检查,可以过滤掉大部分可能损坏的,或者压根就不是class的文件,来冒充装载。 第二趟是,检查它是否符合java语言特性里的编译规则。比如发现一个类的超类不是Object,就抛出异常。 第三趟是,检查字节码是否能被JVM安全的执行,而不会导致JVM崩溃。这里提到了一个停机的问题。内容是这样的,“即不可能写出一个程序,用它来判定作为其输入而读入的某个程序,是否会停机”。意思是,不可能写一个程序,让它告诉你,另外一个程序会不会中断或崩溃。 第四趟是,符号引用验证。一个类文件