Java安全机制

原创 2015年11月17日 22:31:14

Java安全机制

  1. 类装载器结构 (class loader)

  2. class文件检查器 (the class file verifier)

  3. 内置于Java虚拟机(及语言)的安全特性

  4. 安全管理器及Java API (security manager)

关于Java安全沙箱:
http://blog.csdn.net/miyao16/article/details/4909370

在Java沙箱中,类装载器体系结构是第一道防线。它在三个方面对Java的沙箱起作用:

  1. 它防止恶意代码区干涉善意的代码

  2. 它守护了被信任的代码的边界

  3. 它将代码归于某类(称为保护域),该类确定了代码可以进行哪种操作

Class文件检查器 (the class file verifier):

Class文件检查器保证装载的class文件内容有正确的内部结构,并且这些class文件互相间协调一致。Class文件检查器实现的安全目标之一就是程序的健壮性。如果某个有漏洞的编译器,或某个聪明的黑客,产生了一个class文件,而这个class文件中包含了一个方法,则合格方法的字节码中含有一条跳转到方法之外的指令,那么,一旦这个方法被调用,它将导致虚拟机的崩溃,所以,处于对健壮性的考虑,由虚拟机检验它装载的字节码的完整性非常重要。

Class文件检查器要进行四趟独立的扫描来完成它的操作。

第一趟:Class文件的结构检查

在这一趟扫描中,对每一段将被当做类型导入的字节序列,Class文件检查器都会确认它是否符合JavaClass文件的节本结构。在这一趟检查中检查器会进行很多检查例如:每个Class文件都必须以四个同样的字节开始:0xCAFEBABE。因为这个魔数Class文件分析器会很容易判断出某个文件具有明显问题而加以拒绝。检查器还必须确认在Class文件中声明的版本号和次版本号,这个版本号必须在这个虚拟机实现可以支持的范围之内。而且第一趟扫描还必须确认这个Class文件有没有被删减。总之第一趟扫描的目的就是保证这个字节序列正确的定义了一个新类型。

第二趟:类型数据的语义检查

第二趟扫描,检查器要查看每个组成部分,确认它们是否是其所属类型的实例,他们的结构是否正确。另外还要检查这个类本身是否符合特定的条件,它们是由Java编程语言规定的。例如,检查器强制规定除Object类以外的类必须有一个超类,或者检查final类有没有被子化等。

第三趟:字节码验证

这一趟是要确保采用任何路径在字节码流中都得到一个确定的操作码,确保操作数栈总是包含正确的数值以及正确的类型。

第四趟:符号引用的验证

在动态链接的过程中,如果包含在一个Class文件中的符号引用被解析时,Class文件检查器要进行第四趟检查。第四趟扫描仅仅是动态链接过程的一部分。当一个Class文件被装载时,它包含了对其他类的符号引用以及它们的字段和方法。一个符号引用是一个字符串,它给出了名字,并且可能还包含了其他关于这个被引用项的信息------这些信息必须足以唯一的识别一个类、方法、字段。这样对于其他类的符号引用必须给出这个类的全名;对于其他类的字段的符号引用必须给出类名、字段名以及字段描述符;对于其他类中的方法的引用必须给出类名、方法名以及方法的描述符。

所谓的动态链接是一个将符号引用解析为直接引用的过程。

此外,由于Java程序是动态链接的,所以Class文件检查器在进行第四次扫描中,必须检查相互引用类之间的兼容性。

除此之外,Java虚拟机还有一些内置的安全特性:

  1. 类型安全的引用转换

  2. 结构化的内存访问

  3. 自动垃圾收集(不必显式地释放被分配的内存)

  4. 空引用检查

    通过保证一个Java程序只能使用类型安全的、结构化的方法去访问内存,Java虚拟机使得Java程序更为健壮。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

多媒体信号处理学习随笔

随着计算机的发展以及电子技术的发展,人们进入了MPC(多媒体计算机)时代,人们的生活离不开多媒体计算机,下面是笔者在多媒体处理方面的一些学习随笔,让我们一起来看看多媒体信息是怎样经过计算机处理的。  ...

Tomcat源码分析(二)--连接处理

目标:在这篇文章希望搞明白http请求到tomcat后是怎么由连接器转交到容器的?       在上一节里已经启动了一个HttpConnector线程,并且也启动了固定数量的HttpProcesso...

简单sql盲注的后台解决

算是提供思路吧,基本的就是对特殊字符进行替换,究其根本的解决之道,还有就是前台也可以进行特殊字符的替换,算是双管齐下吧,还有很多的解决之道,在此不做过多描述,该演示代码中提供了JS的前台替换语句及后台...

JavaWeb 项目安全问题及其解决方案

1.弱口令漏洞 解决方案:最好使用至少6位的数字、字母及特殊字符组合作为密码。数据库不要存储明文密码,应存储MD5加密后的密文,由于目前普通的MD5加密已经可以被破解,最好可以多重MD5加密,或者多种...

Tomcat源码分析(一)--服务启动

对Tomcat感兴趣是由于《深入理解Tomcat》这本书,之前仅仅是使用到了Tomcat,这本书却让我对Tomcat的实现理解的更加透彻了,在这里希望记录一些自己对Tomcat的理解。由于这本书是基于...

java如何实现安全性

原文地址:The JVM Part2: java如何实现安全性" href="http://blog.sina.com.cn/s/blog_40d608bb0100tw7s.html" target=...

java在web开发安全性方面的总结

1.       客户输入的原始数据进行校验不依赖于Script。虽然JavaScript等等的客户端的输入数据的校验即使比较方便也不能使用因为安全性方面的原因。脚本是不安全的,用户可能屏蔽脚本,我们...

java安全机制的理解

Java的安全模式包括3层:Java语言本身,java编译器和run-time系统,SecurityManager类。 在语言层,java以不同的方式来实现它的安全性,什么原始类型的大小,对象的指针...

java安全性编程

java的安全性编程其实也是略带了点防御性编程的意思在里面,其实java作为一门编程语言,相对C,c++,本身算比较安全的,跟C,C++这种偏底层的编程语言比,java少了显示的指针调用,少了程序上的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)