一:为什么需要安全性
1:因为网络允许多台计算机共享数据和分布式处理,所以它提供了一条侵入计算机系统的潜在途径,使得恶意用户可能窃取信息,改变或者破坏信息,盗取计算机资源等。因此计算机连入网络很容易产生安全问题。
2:如果在一个环境中,软件可以通过在网络中下载并且在本地运行,这个问题尤其严重。比如Applet 和Jini服务对象就是这样的例子。因为当用户在浏览器打开网页时,Applet的Class文件会自动下载,很有可能用户会遇到来自不可靠来源的Applet。
3:当一个Jini服务对象用JiNI查找服务进行服务注册时,它的Class将从服务供应商指定的代码库进行下载。Jini实现了一个自发的网络互连,客户机进行一个新的环境查找并访问本地服务。因此JINI可能会遇到来自不可靠的服务对象。
如果没有任何安全机制,这些自动下载的模式为恶意代码发布提供了便捷的途径。JAVA的安全机制使得JAVA适用于网络,因为它们建立了堆网络移动代码安全秩序必要的可信机制。
二:JAVA沙箱的基本组件
1:类加载器结构
它防止了恶意代码去干涉善意的代码,这是通过为不同的类加载器装入的类提供了不同的命名空间来实现的,命名空间互相独立。
它守护了被信任类库的边界,这是通过分别使用不同的类加载器装载可靠的包和不可靠的包来实现的。
它将代码归入某类(命名空间),该类确定了代码可以执行哪些操作,一个保护域定义了这个代码在运行时将得到的权限。
2:class文件效验器
class文件结构的检查
类型数据的语义检查
字节码验证
符号引用的检查
二进制兼容
3:内置于JAVA虚拟机(及语言)的安全特性
类型安全的引用转换
结构化的内存访问(无指针算法)
自动垃圾收集(不必显示的释放被分配的内存)
数组边界检查
空引用检查
4:安全管理器及API
虽然安全管理器是JAVA安全模型最大的优点之一,但是也有一个潜在的弱点。编写一个安全管理器是一项负责的任务,并可能导致出错。在实现安全管理器的check方法
时,任何错误都将变成运行时的安全漏洞。
5:代码签名和认证
三:什么是字节码
字节码代码了java的方法,它是由称为操作码的单字节指令组成的序列,每一个操作码后面多跟着一个或者多个操作数。