起到第一道安全保障作用的”双亲委派类加载模型”
双亲委派方式的类加载,指的是优先从顶层启动类加载器开始,自顶向下的方式加载类的模型(参见第一条类装载器体系结构)。
这种模型的好处是,底层的类装载器装载的类无法与顶层类装载器装载的类相互调用。
哪怕是同包下的类,只要他们不属于同一类装载器,都是相互隔绝的。这对一些有安全隐患的类起到了安全隔离的作用。使它不能冒充系统类来破坏程序正常运作。
此外,不同的类装载器,也有自己的类装载范围。比如启动类装载器,它只会装在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沙箱模型的组成 Java沙箱模型主要由以下几个部分组成: 1. **类装载器**:负责加载类...
综上所述,处理 Flash 安全沙箱问题涉及理解沙箱模型、设置跨域策略、实现安全通信接口、管理权限、代码签名、异常处理以及遵循安全编码实践等多个方面。开发者需要在 Java, C# 和 Delphi 中综合运用这些技术来创建...
首先,我们需要了解AS3的安全沙箱模型。AS3的沙箱分为三类:本地信任的沙箱(Local-with-Files)、网络沙箱(Network)和本地无限制沙箱(Local-trusted)。默认情况下,AS3代码运行在网络沙箱中,对网络访问有一定...
代码安全性:Java提供了强大的安全机制,如访问控制、类加载验证、沙箱模型等。这些机制确保代码在运行时不会执行恶意操作或访问未经授权的资源。 身份认证和访问控制:Java安全包括用户身份认证和授权机制,以确保...
Java 安全模型的演化经历了从沙箱模型到 Java2 安全模型的发展。沙箱模型将远程代码和本地代码分离,限制远程代码的访问权限,保护系统的安全。 Java2 安全模型引入了数字签名服务,允许可信的 Applet 获得更多的...
首先,文档标题"JAVA期末复习编程题.pdf"提示了文件内容涉及Java编程的练习题...在安全方面,涉及到Applet的安全限制和Java安全沙箱模型。这类练习题对于期末复习来说,十分适合巩固Java语言的理论知识和实际应用能力。
此章可能会介绍Java的沙箱模型,它是Java安全性的基石。还会讨论类加载器、权限和安全策略文件等概念。 2. **Ch3** - 可能深入到“权限与访问控制”。这一章可能涵盖如何使用`java.security.Permission`类来定义和...
最后,Java的沙箱模型限制了未经签名或未认证的代码的权限,防止它们对系统造成破坏。对于不受信任的代码,Java运行时环境会在一个受限的环境中执行,这就是所谓的“沙箱”。 综上所述,Java安全性编程涉及多个方面...
1. **沙箱模型**:Java使用了沙箱模型来限制不受信任的代码执行权限,防止恶意代码对系统造成破坏。Java虚拟机(JVM)为每个应用程序提供了一个安全环境,限制了可以执行的操作。 2. **权限管理**:通过权限类...
1. **Java安全模型**:Java的安全模型基于沙箱环境,通过权限管理来限制代码执行的操作,防止不受信任的代码对系统造成破坏。理解类加载器、安全上下文以及权限模型对于编写安全的Java代码至关重要。 2. **异常处理...
其次,Java安全模型是Java平台安全性的基石。书中会讲解如何利用Java安全沙箱机制来限制代码的权限,防止恶意代码执行。Java的类加载器和安全策略文件是控制代码访问权限的关键组件。开发者需要理解如何配置和管理...
3. **沙箱模型**:Java的沙箱模型是一种安全机制,它限制了未经验证的代码的执行权限。所有Java应用程序都在JVM的沙箱环境中运行,以防止恶意代码对系统造成破坏。 4. **安全管理器**:Java的安全管理器允许自定义...
首先,Java的安全模型基于“沙箱”理念,这意味着所有非可信的代码都会在一个受限制的环境中运行,防止它们对系统造成破坏。在Java中,这一概念通过类加载器和安全策略实现,它们定义了哪些操作是允许的,哪些是禁止...
在深入探讨这些技术之前,我们首先要理解Java安全模型的基础——沙箱模型。这个模型将Java应用程序运行在一个受限的环境中,防止它们对操作系统或者其他不受信任的代码造成潜在的危害。 Java的安全架构主要由三个...
1. **Java安全模型**:Java的安全模型基于沙箱机制,它限制了代码(尤其是来自不可信源的代码)的执行权限,以防止恶意行为。理解这个模型是确保代码安全的基础。 2. **类加载器与权限**:Java中的类加载器负责加载...
Java的沙箱模型是其安全性的基石,它限制了代码的运行权限。所有Java应用程序都运行在一个虚拟机中,这个虚拟机就像是一个封闭的环境,只允许代码在指定的范围内活动,防止了代码对主机系统的直接操作,降低了安全...
本手册将介绍Java的安全模型,包括类加载机制、权限管理、沙箱模型以及如何利用Java的内置安全框架来强化应用程序。书中可能还会涵盖如何处理敏感数据,如加密算法的选择、密钥管理以及HTTPS的使用,这些都是保护...
同时,JVM内嵌的安全模型为Java程序提供了一个名为“沙箱”的安全执行环境,这使得Java应用程序在执行时被限制在一定的权限范围内,从而保护了系统资源免受潜在的恶意代码攻击。 3. Java安全策略的演进 早期的Java...
Java沙箱逃逸攻击是指恶意代码试图突破Java安全模型的限制,获取系统级权限或执行非授权操作的行为。为了防止这种攻击,开发者可以利用Java字节码插桩和方法挂钩技术来增强应用的安全性。本文将深入探讨这两种技术...