`

java 安全沙箱模型详解

阅读更多

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

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

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

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

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包进行签名,发布。

签名原理:
使用非对称算法,生成一对公钥/私钥。

证书
证书是在签名基础上,对签名值,再进一步做一次加密。而这次加密使用的私钥和公钥都是证书机构提供的。
这种方式,是为了防止,有些恶意用户,在公钥发到你手上前,就对其做了手脚,然后再发一个动过手脚的jar给你,用动过手脚的公钥解动过手脚的jar包,是可以解开的。
而使用证书后,它会对已经加密的签名值,再做一层加密,这样,到你手里,你只需要通过证书机构的公钥进行解密,然后再用jar包发布者的公钥解密就行了。(只能在一定程度上,提供一些安全性)

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

分享到:
评论

相关推荐

    基于沙箱的Java安全体系结构

    java安全沙箱,具体内容见文档,非常之强大

    java和as3 socket通信 解决安全沙箱问题

    NULL 博文链接:https://renzaihangzhou.iteye.com/blog/2007855

    flash安全沙箱汇总

    flash安全沙箱汇总。从网上摘录的东东。

    java ,c#,delphi 解决flash安全沙箱问题

    java ,c#,delphi 解决flash安全沙箱问题 聊天室

    安全沙箱容器在边缘计算场景的实践.pdf

    1.安全沙箱容器 2.EdgeKubernetes 3.安全沙箱容器@edge方案 4.新探索 随着云计算边界不断向边缘侧延展,5G 和物联网技术的蓬勃发展给边缘计算带来了巨大机遇的同时,也带来了极大的挑战,传统 runc 容器已无法满足...

    AS与java socket通讯解决安全沙箱

    AS与java socket通讯 解决安全沙箱 服务端用JAVA写的 用其他语言写的服务端 可以参考一下 都差不多的 这是网上COPY的那种方法所改进的,可以运行的。

    FLEX安全沙箱实用指南

    详细介绍了FLEX安全沙箱,便于大家开发FLEX时参考使用。

    P神-Java安全漫谈

    代码安全性:Java提供了强大的安全机制,如访问控制、类加载验证、沙箱模型等。这些机制确保代码在运行时不会执行恶意操作或访问未经授权的资源。 身份认证和访问控制:Java安全包括用户身份认证和授权机制,以确保...

    全面认识Flex安全沙箱

    全面认识Flex安全沙箱 flex4发布后在IE中运行出现的安全沙箱问题。

    要要安全沙箱v1.0官方免费安装版

    要要安全沙箱是一款免费国产沙箱软件,为用户提供方便,专业,纯粹的沙箱产品。用户可以在要要安全沙箱环境中运行浏览器,软件等程序,沙箱中运行和程序不会对系统和电脑产生任何的实际的更改和影响,程序运行所产生...

    java支付宝沙箱教程

    支付宝沙箱(Alipay Sandbox)是支付宝提供的一个测试环境,用于模拟支付宝支付接口和功能的开发和测试。它允许开发人员在不影响真实支付流程的情况下,进行支付功能的调试、验证和优化。以下是对支付宝沙箱的详细...

    AS3.0安全沙箱 843策略文件

    这是个通用类,里面包含了处理843端口的安全沙箱问题以及socket基本的向服务器send资源问题。 请求方式是,先发整形,然后发id长度,再发id(String) 得到的资源是先得到字符长度,再得到字符串。这个是和后退约定的...

    flex 安全沙箱 策略问题 demo

    在Adobe Flash Player升级到9.0.124后,由于安全策略更改,原来Socket或XmlSocket的应用里的http方式加载安全策略的...service_001是java服务端 connectbysocket 是flex客户端 connectbysocket请放在tomcat下试验效果

    sandboxie安全沙箱

    Sandboxie(英译“沙盘”)允许你在...可用来保护浏览网页时真实系统的安全,也可以用来清除上网、运行程序的痕迹,还可以用来测试软件,测试病毒等用途。即使在沙盘进程中下载的文件,也可以随着沙盘的清空而删除。

    as3 安全沙箱 处理办法

    写的一款组件·在服务器上运行可解决flash通信问题

    [数据安全]Java生态圈沙箱逃逸实战.zip

    [数据安全]Java生态圈沙箱逃逸实战 数据安全 web安全 WEB应用防火墙 安全实践 攻防靶场

    Flash Socket安全沙箱策略mini服务器,解决Flash Socket安全沙箱,安全策略

    本程序为绿色mini服务程序 程序会自动打开Flash默认的843端 自动将crossdomain.xml返回给flash客户端 您可以修改crossdomain.xml中的内容,大小不要超过10K 有问题可email我

    微信支付沙箱密钥获取

    微信支付沙箱密钥的获取方法有注解,附加一个HttpUtill类,输入正确的参数调用就可以获取的对应的沙箱密钥。

    源于FLEX中的安全沙箱问题

    FLASH PLAYER中的一个主要安全性组件基于沙箱,是FLASH PLAYER用于包含资源的逻辑安全性分组。 FLASH PLAYER使用安全沙箱来定义各个FLASH应用程序可以访问的操作的范围,即他们可以访问哪些资源。 各个沙箱的所有...

Global site tag (gtag.js) - Google Analytics