Java杂谈6——Java安全模型
Java语言安全模型是其有别于传统的编程语言的一个很重要的特点,采用一种沙箱模型隔离了Java的运行环境与具体的操作系统,使得Java在网络环境下能够更为安全的运行。理解Java的安全模型,能够帮助我们站在更高的层面理解Java的底层实现,在适当的时机及时找出问题所在。
沙箱模型的建立主要涉及了Java语言相关的以下几个部分:
- 类加载器;
运行时包:指由同一个类加载器装载的、属于同一个包的、多类型的集合。任意两个Java类包访问权限适用的前提是:属于同一个包,还必须是属于同一个运行时包。这样规定的动机之一就是防止一个由用户自定义类加载器装载的Java类非法获取到Java核心API的包访问权限。
例如:通过动态类加载一个名为Java.lang.Virus的Java类能够被装载到内存,由于这个类是属于包Java.lang。如果不加以限制,这个外部的类就会拥有包内其他类的包访问权限。
双亲托管模型:保证基本Java类库不会被恶意代码任意覆盖,具体的内容可以参考我之前的文章。
- 类文件校验器;
类文件的校验一般有四个步骤:
- Class文件的结构验证;
- 类型数据的语义检查(包括具体的操作码,操作数);
- 字节码的验证(例如程序的可停机性,操作码的合法性);
- 符号引用的验证(过程中还包括了装载引用外部类,符号替换,链接过程的二进制兼容性判断)。
- 内置的安全特性;
包括了如下几个方面:
- 类型安全的引用转换;
- 结构化内存访问(屏蔽指针操作);
- 自动垃圾回收;
- 数组边界检测;
- 空引用检查。
- 安全管理器与Java API。
检测Java虚拟机堆外部资源访问的合法性,即界定沙盒的边界。不会被默认设置,如果需要检测在编码中需要自行编写。参见Java.lang.SecurityManager下的一系列以“check”开头的方法。
Java杂谈6——Java安全模型的更多相关文章
- Java杂谈4——Java中的字符串存储
Java中的String Java.Lang.String是Java语言自带的字符串实现,它并不是java的基本类型,但却和几乎每个java程序都密切相关的一个基础java类. string类内部实际 ...
- Java杂谈1——虚拟机内存管理与对象访问
1.理解JAVA虚拟机的内存管理 运行时的数据区 从java虚拟机的内存分配来看,一个java程序运行时包含了如下几个数据区: a) 程序计数寄存器(Program Counter Regis ...
- Java SE、Java EE、Java ME
Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程序.J ...
- [java基础知识]java安装步骤
jre: java运行环境. jre = java虚拟机 + 核心类库(辅助java虚拟机运行的文件).如果只是运行java程序,只需要安装jre. jdk: java开发工具集 jd ...
- Java Se:Java Security
Java API中有很多都使用了SecurityManager,这到底是什么玩意?最近看公司的产品的源码,也有不少SecurityManager.AccessControlContext等相关的代码, ...
- 浅谈Java SE、Java EE、Java ME三者的区别
本文把JAVA SE.JAVA EE.JAVA ME拿来做下区别,同时也分享一下作者的一些成果.目前的Java平台根据软件开发人员.服务提供商和设备生产商可以针对特定的市场可以分为三个版本JAVA S ...
- Java SE、Java EE、Java ME 三者区别
现在一个个来分析 1. Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 ...
- 24. Java SE 、 Java EE 、JavaME 、 JavaWeb 直接的区别和联系
这个是在别人博客抄的,并不是本人撰写 Java是一门编程语言.Java分为三大版本,SE即标准版,包含了Java核心类库,主要用来开发桌面应用:EE即企业版,包含SE,又有扩展部分(Servlet,J ...
- Java SE、Java EE、Java ME三者的区别
1. Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程 ...
随机推荐
- 【sgu390】数位dp
这题其实就是不断地合并子树,跟前面例一的思想是一样的. 这个打法我觉得非常优美啊(学别人的),为什么要搞lim1和lim2呢? 是因为在区间lim1~lim2之外的都是没有用的,但是我们f[h][su ...
- jzoj2701 【GDKOI2012模拟02.01】矩阵
传送门:https://jzoj.net/senior/#main/show/2701 [题目大意] 给出矩阵A,求矩阵B,使得
- AtCoder Regular Contest 082 F
Problem Statement We have a sandglass consisting of two bulbs, bulb A and bulb B. These bulbs contai ...
- DotNETCore 学习笔记 宿主
Hosting -------------------------------------------------------------------------- Setting up a Host ...
- 填坑webpack
1.Concepts: webpack is a module bundler for modern JS applications. Since there are lots of complex ...
- IOS UITableViewUITableView小技巧--实现cell向左滑动删除,编辑等功能
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { return Y ...
- LNMP的基本配置
LNMP的基本配置cd /usr/local/nginx_php/etc/ > php-fpm.conf //清空php-fpm.conf vim ph ...
- 【LeedCode】3Sum
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...
- HDU 1465.装错信封-递推
不容易系列之一 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- bufferknife框架的正确使用方式 -终于他么知道了
1.由于ButterKnife从7.x到8.x后,运行时和编译器被分开来,你还需要配置 apt ‘com.jakewharton:butterknife-compiler:8.1.0’,在projec ...