java 安全方面的考虑简单

参考 深入理解JVM

1 双亲委派模型

(1)防止不可靠的代码用自己的版本替代可信任的类。

(2)运行时包的概念:同一个类装载的、属于同一个包的、多个类型的集合。

       加载java.lang.Virus这个非法的类,不能访问java.lang包中的API。

2 class文件验证器

   第一趟在类被装载的时候进行,检查内部结构,保证可被编译。

   第二趟在连接过程中进行,语义检查,方法描述符符合特定字符串。

   第三趟在连接过程中进行,字节码验证

   第四趟在解析过程中进行,符号引用的验证

 

CLassLoader类中loadClass的具体实现

(1)查看请求的类装载器是否已经被装载进这个类装载器的命名空间。如果确实如此,返回这个已经装载的Class实例。

(2)否则委派双亲类装载器,如果双亲返回,则返回这个Class实例。

(3)否则,调用findClass(),findClass会试图寻找或生成一个字节数组。如果成功,findClass()把字节数组传递给defineClass,后者试着导入这个类型,返回一个Class实例。如果findClass返回了一个Class实例,loadClass()把这个实例返回。

(4)否则,findClass抛出某些异常,loadClass返回同样异常。

 

forName 和loadClass的区别?

loadClass保证被装载的类型是被装载到用户自定义的类装载器的命名空间里,而forName确认所需的类型被装载到当前命名空间中,就是forName方法调用所属的定义类装载器的命名空间。

 

3 内置的安全特性

   自动GC

   数组边界检查

   空引用检查

   类型安全的引用转换

   结构化的内存访问(无指针)

4 安全管理器

   保护虚拟机外的资源不被运行的恶意代码破坏

5 代码签名和认证

6 策略

7 保护域

8 访问控制器

原文地址:https://www.cnblogs.com/yujy/p/2974050.html