Java杂谈6——Java安全模型

  Java语言安全模型是其有别于传统的编程语言的一个很重要的特点,采用一种沙箱模型隔离了Java的运行环境与具体的操作系统,使得Java在网络环境下能够更为安全的运行。理解Java的安全模型,能够帮助我们站在更高的层面理解Java的底层实现,在适当的时机及时找出问题所在。

沙箱模型的建立主要涉及了Java语言相关的以下几个部分:

  • 类加载器;

    运行时包:指由同一个类加载器装载的、属于同一个包的、多类型的集合。任意两个Java类包访问权限适用的前提是:属于同一个包,还必须是属于同一个运行时包。这样规定的动机之一就是防止一个由用户自定义类加载器装载的Java类非法获取到Java核心API的包访问权限。

例如:通过动态类加载一个名为Java.lang.Virus的Java类能够被装载到内存,由于这个类是属于包Java.lang。如果不加以限制,这个外部的类就会拥有包内其他类的包访问权限。

双亲托管模型:保证基本Java类库不会被恶意代码任意覆盖,具体的内容可以参考我之前的文章

  • 类文件校验器;

  类文件的校验一般有四个步骤:

  1. Class文件的结构验证;

  2. 类型数据的语义检查(包括具体的操作码,操作数);

  3. 字节码的验证(例如程序的可停机性,操作码的合法性);

  4. 符号引用的验证(过程中还包括了装载引用外部类,符号替换,链接过程的二进制兼容性判断)。

  • 内置的安全特性;

  包括了如下几个方面:

  1. 类型安全的引用转换;

  2. 结构化内存访问(屏蔽指针操作);

  3. 自动垃圾回收;

  4. 数组边界检测;

  5. 空引用检查。

  • 安全管理器与Java API。

  检测Java虚拟机堆外部资源访问的合法性,即界定沙盒的边界。不会被默认设置,如果需要检测在编码中需要自行编写。参见Java.lang.SecurityManager下的一系列以“check”开头的方法。

Java杂谈6——Java安全模型,布布扣,bubuko.com

时间: 2024-10-24 22:43:15

Java杂谈6——Java安全模型的相关文章

Java杂谈之二----怎样判断一个数是水仙花数以及穷举水仙花数

首先明确一下什么是水仙花数 百度说,水仙花数指一个n位数(n>=3),它的每个位上的数字的n次幂之和等于它本身 例如:1^3+5^3+3^3=153 水仙花数只是自幂数的一种,严格来说三位数的3次幂数才能成为水仙花数. 但其实也分一位自幂数,两位自幂数,三位自幂数,四位自幂数等等. 所以鉴于水仙花数的定义的不确定和模糊性 以下代码示例不仅限于三位数的水仙花数,主要涉及的是思想问题. 类名:JavaNarcissus 构造函数:JavaNarcissus() 判断一个数是否为水仙花数:IsNarc

Java杂谈三之判断素数以及穷举素数

首先确认下什么是素数,又称质数 百度的定义解答: 质数(prime number)又称素数,有无限个.一个大于1的自然数,如果除了1和它本身 外,不能被其他自然数整除(除0以外)的数称之为素数(质数) 明确了素数的定义后,下面用java来判断素数以及穷举2-999以内的素数,还是一样,主 要看的是对一个数进行判断或者对一组数进行判断的思想,至于怎样判断的,百度的定义已经给了很好的解答思路. JavaPrimeNubmer:类名 enumPrimeNumber():穷举2-999以内的所有素数 m

Java杂谈之值传递和引用传递

Java中经常把值传递和引用传递混淆,其实一般来说,值传递只相对于基本数据类型和 String数据类型,其余的一般都是引用传递. 先举值传递的例子: package JavaStaticOrNotFunction; public class ChangeSimpleType { public static void main(String[] args) { //基本类型作为参数的时候,传递的是值 //String作为参数的时候,传递的也是值 int i = 70; String j = "he

Java杂谈之构造函数链

Java的构造函数链,首先对类的构造函数明确几点: 1.类的构造函数可以重载 2.类的构造函数访问修饰符不一定是public,也可以为private等其他访问修饰符 3.类的构造函数无返回值 4.类的构造函数名与类名保持一致 以下是具体的实例: 类:Person类 类:Employee类(继承Person类) 类:Manager类(继承Employee类) 首先是Person类: package JavaConstructorFunChain; public class Person { pri

Java杂谈之StringBuffer----兼带String,StringBuffer,StringBuilder的区别

在Java中,用到最多的当属String类型的数据了 而这一点就要涉及String , StringBuffer , StringBuilder这三大类 下面主要来比较一下String和StringBuffer的区别,因为StringBuffer和StringBuilder 太相似,所以就不拿来比较了. 提及一下,StringBuffer和StringBuilder的区别 从安全性来说,StringBuffer更安全,StringBuffer主打线程安全 从执行效率来说,StringBuilde

Java杂谈之正则表达式--日期,邮箱,数字验证

当我们判断数据的格式是否符合规范的时候,一般会采用两种方式: 一种是if...else不断的嵌套或者if...else并排判断的方式 (这两者代表以条件正确为前提还是以条件错误为前提的) 另一种就是正则表示式. 字符串匹配给正则表达式:boolean matches(Stirng regex) 用法:String.matches(regex) 当然可以说if...else是万能的,正则表达式是有局限的,不能过分依赖,它只是解决问 题的一种手段而已,并不是必要的. 但往往用正确的使用正则表达式能让

Java杂谈之各种类型转换

在写程序时,难免会遇到类型转换的问题,下面列出了各种类型的转换方法,我们要做的 只是会举一反三就可以了. package JavaTestString; //包装类 //char----charcter //float---Float //int-----Integer //boolean-Boolean public class JavaTypeConvert { public static void main(String[] args) { //Sting的类型转化--> 基本类型: 包装

Java杂谈之数组

数组在编程过程中用的频率较高,所以熟练掌握数组的各种方法尤为重要. 主要方法: 1.Arrays.toString()--主要用于输出 (此方法是不需要用for循环遍历数组显示出来,用这个方法直接能输出数组的全部数据) 2.System.arraycopy()--数组复制 将一个数组的一部分或者全部复制给另一个数组 3.Arrays.sort()--数组排序 将一个数组进行排序,默认从小到大 4.Arrays.binarySearch()--数组折半查找 注意这个函数之前必须对数组进行排序 以下

Java杂谈之String----"=="与equals的区别

在程序代码的编写中,经常涉及到两个字符串的比较 这个时候一般困惑我们的是"=="和equals方法的取舍问题,实际上,只要明白了这两者 比较的区别,我们就能够正确的选择出到底采用哪种方式进行字符串的比较了 首先我们定义两个字符串 String s1 = "hello"; String s2 = new String("hello"); 这两个都建立了"hello"的字符串,但到底有什么不同呢 注意,Java中没有指针的概念,这