转载

java 安全沙箱模型详解

起到第一道安全保障作用的”双亲委派类加载模型”

双亲委派方式的类加载,指的是优先从顶层启动类加载器开始,自顶向下的方式加载类的模型(参见第一条类装载器体系结构)。

这种模型的好处是,底层的类装载器装载的类无法与顶层类装载器装载的类相互调用。

哪怕是同包下的类,只要他们不属于同一类装载器,都是相互隔绝的。这对一些有安全隐患的类起到了安全隔离的作用。使它不能冒充系统类来破坏程序正常运作。

此外,不同的类装载器,也有自己的类装载范围。比如启动类装载器,它只会装在jdk/lib目录下的包/类,因此,系统级的类是相对安全的。

java 安全沙箱模型详解

class 文件校验器,通过四趟扫描,保证了class文件正确

第一趟是,检查class文件的结构是否正确。比较典型的就是,检查class文件是否以魔数OxCAFEBABE打头。

通过这趟检查,可以过滤掉大部分可能损坏的,或者压根就不是class的文件,来冒充装载。

第二趟是,检查它是否符合java语言特性里的编译规则。比如发现一个类的超类不是Object,就抛出异常。

第三趟是,检查字节码是否能被JVM安全的执行,而不会导致JVM崩溃。这里提到了一个停机的问题。内容是这样的,“即不可能写出一个程序,用它来判定作为其输入而读入的某个程序,是否会停机”。意思是,不可能写一个程序,让它告诉你,另外一个程序会不会中断或崩溃。

第四趟是,符号引用验证。一个类文件,它会包含它引用的其他类的全名和描述符,并跟他们建立符号引用(一种虚拟的,非物理连接的方式)。当程序第一次执行到需要符号引用的位置时,jvm会检查这个符号链接的正确性,然后建立真正的物理引用(直接引用)。

jvm 类型安全特性

这些都是基础的java语言特性,他们降低了java程序出现内存混乱,崩溃的几率。

结构化内存访问(不使用指针,一定程度上让黑客无法篡改内存数据)

自动垃圾收集

数组边界检查

空引用检查

数据类型安全

Java api 的安全管理器 securityManager

这是安全沙箱中,离我们程序员最接近的一环。

securityMananger,是一个api级别的,可自定义的安全策略管理器,它深入到java api中,在各处都可以见到它的身影。比如SecurityClassLoader。

默认情况下,java应用程序是不设置 securityManager 实例的(意味着不会起到安全检查),这个实例需要我们在程序启动时通过 System.setSecurityManager 来设置。

一般情况下,检查权限是,通过 SecurityManager.checkPermission(Permission perm) 来完成的。外部程序通过,创建Permission实例,传递给前面的check。

Permission是一个抽象类,需要继承它实现不同的权限验证,比如 FilePermission,代表对某个文件的读写权限。

new FilePermission(“test.txt”, “read”)

你可以将这个实例,扔给 SecurityManager,检查是否可读text.txt这个文件。

java 签名/证书机制

java签名/证书机制,可以保障使用者,安全地调用外部提供的jar,防止你信任的jar被篡改。

首先,java的签名,必须是基于jar包的。也就是说,你必须将你要提供的class,打包到jar里。

然后,通过 java 提供的签名工具(jarsigner)对jar包进行签名,发布。

签名原理:

使用非对称算法,生成一对公钥/私钥。

java 安全沙箱模型详解

证书

证书是在签名基础上,对签名值,再进一步做一次加密。而这次加密使用的私钥和公钥都是证书机构提供的。

这种方式,是为了防止,有些恶意用户,在公钥发到你手上前,就对其做了手脚,然后再发一个动过手脚的jar给你,用动过手脚的公钥解动过手脚的jar包,是可以解开的。

而使用证书后,它会对已经加密的签名值,再做一层加密,这样,到你手里,你只需要通过证书机构的公钥进行解密,然后再用jar包发布者的公钥解密就行了。(只能在一定程度上,提供一些安全性)

转载请注明原文链接: http://kenwublog.com/explain-java-security-sandbox

觉得文章有用?立即:和朋友一起 共学习 共进步!

建议继续学习:

  1. 腾讯执行的感悟(安全方向)    (阅读:4226)
  2. 如何让ssh登录更加安全    (阅读:3822)
  3. 公钥私钥加密解密数字证书数字签名详解    (阅读:3218)
  4. 为flash建立socket安全策略文件服务器    (阅读:3019)
  5. 微博架构与平台安全演讲稿    (阅读:2969)
  6. php.ini安全配置及使用说明    (阅读:2951)
  7. 查看你服务器的安全性    (阅读:2606)
  8. IT从业人员需要知道的安全知识(1)    (阅读:2412)
  9. 淘宝网:前端安全须知    (阅读:2328)
  10. Mysql 安全    (阅读:2095)

QQ技术交流群:445447336,欢迎加入!

扫一扫订阅我的微信号:IT技术博客大学习

原文  https://blogread.cn/it/article/3897?f=hot1
正文到此结束
Loading...