「java平台沙箱」java平台沙箱安全模型包含哪些安全组件

博主:adminadmin 2022-12-15 22:39:07 101

本篇文章给大家谈谈java平台沙箱,以及java平台沙箱安全模型包含哪些安全组件对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Java通过“沙箱”来防止这些问题的发生怎样理解

sandbox,就是一个虚拟机,所有的指令的影响不会超过这个虚拟机,所以即使有非法指令,也不会影响其他的虚拟机,即使内存泄漏,虚拟机结束的时候也会被全部清理

ClassLoader的工作机制是什么?

java应用环境中不同的class分别由不同的ClassLoader负责加载。

一个jvm中默认的classloader有Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader,分别各司其职:

Bootstrap ClassLoader负责加载java基础类,主要是 %JRE_HOME/lib/ 目录下的rt.jar、resources.jar、charsets.jar和class等;

Extension ClassLoader负责加载java扩展类,主要是 %JRE_HOME/lib/ext 目录下的jar和class;

App ClassLoader负责加载当前java应用的classpath中的所有类。

其中Bootstrap ClassLoader是JVM级别的,由C++撰写;Extension ClassLoader、App ClassLoader都是java类,都继承自URLClassLoader超类。

Bootstrap ClassLoader由JVM启动,然后初始化sun.misc.Launcher ,sun.misc.Launcher初始化Extension ClassLoader、App ClassLoader。

Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader三者的关系如下:

Bootstrap ClassLoader是Extension ClassLoader的parent,Extension ClassLoader是App ClassLoader的parent。

但是这并不是继承关系,只是语义上的定义,基本上,每一个ClassLoader实现,都有一个Parent ClassLoader。

可以通过ClassLoader的getParent方法得到当前ClassLoader的parent。Bootstrap ClassLoader比较特殊,因为它不是java class所以Extension ClassLoader的getParent方法返回的是NULL。

Java的安全机制有哪些?

》类装载器结构

(class

loader)

》class文件检查器

(the

class

file

verifier)

》内置于Java虚拟机(及语言)的安全特性

》安全管理器及Java

API

(security

manager)

在Java沙箱中,类装载器体系结构是第一道防线。它在三个方面对Java的沙箱起作用:

1它防止恶意代码区干涉善意的代码

2它守护了被信任的代码的边界

3它将代码归于某类(称为保护域),该类确定了代码可以进行哪种操作

Class文件检查器:

Class文件检查器保证装载的class文件内容有正确的内部结构,并且这些class文件互相间协调一致。Class文件检查器实现的安全目标之一就是程序的健壮性。如果某个有漏洞的编译器,或某个聪明的黑客,产生了一个class文件,而这个class文件中包含了一个方法,则合格方法的字节码中含有一条跳转到方法之外的指令,那么,一旦这个方法被调用,它将导致虚拟机的崩溃,所以,处于对健壮性的考虑,由虚拟机检验它装载的字节码的完整性非常重要。

Class文件检查器要进行四趟独立的扫描来完成它的操作。

第一趟:Class文件的结构检查

在这一趟扫描中,对每一段将被当做类型导入的字节序列,Class文件检查器都会确认它是否符合JavaClass文件的节本结构。在这一趟检查中检查器会进行很多检查例如:每个Class文件都必须以四个同样的字节开始:0xCAFEBABE。因为这个魔数Class文件分析器会很容易判断出某个文件具有明显问题而加以拒绝。检查器还必须确认在Class文件中声明的版本号和次版本号,这个版本号必须在这个虚拟机实现可以支持的范围之内。而且第一趟扫描还必须确认这个Class文件有没有被删减。总之第一趟扫描的目的就是保证这个字节序列正确的定义了一个新类型。

第二趟:类型数据的语义检查

第二趟扫描,检查器要查看每个组成部分,确认它们是否是其所属类型的实例,他们的结构是否正确。另外还要检查这个类本身是否符合特定的条件,它们是由Java编程语言规定的。例如,检查器强制规定除Object类以外的类必须有一个超类,或者检查final类有没有被子化等。

第三趟:字节码验证

这一趟是要确保采用任何路径在字节码流中都得到一个确定的操作码,确保操作数栈总是包含正确的数值以及正确的类型。

第四趟:符号引用的验证

在动态链接的过程中,如果包含在一个Class文件中的符号引用被解析时,Class文件检查器要进行第四趟检查。第四趟扫描仅仅是动态链接过程的一部分。当一个Class文件被装载时,它包含了对其他类的符号引用以及它们的字段和方法。一个符号引用是一个字符串,它给出了名字,并且可能还包含了其他关于这个被引用项的信息------这些信息必须足以唯一的识别一个类、方法、字段。这样对于其他类的符号引用必须给出这个类的全名;对于其他类的字段的符号引用必须给出类名、字段名以及字段描述符;对于其他类中的方法的引用必须给出类名、方法名以及方法的描述符。

所谓的动态链接是一个将符号引用解析为直接引用的过程。

此外,由于Java程序是动态链接的,所以Class文件检查器在进行第四次扫描中,必须检查相互引用类之间的兼容性。

除此之外,Java虚拟机还有一些内置的安全特性:

》类型安全的引用转换

》结构化的内存访问

》自动垃圾收集(不必显式地释放被分配的内存)

》空引用检查

通过保证一个Java程序只能使用类型安全的、结构化的方法去访问内存,Java虚拟机使得Java程序更为健壮。

java和.net哪个功能更多?更强大?

从短期内而言Java仍然是企业级开发的强手货,.NET因为安全性可后期的可维护性差所以不被大企业广泛应用,但是如果是开发非B2B那样需要高安全性的项目,还是.NET比较合适,毕竟中小企业承受不了那样开发缓慢和费用高昂的Java软件。其实java和.net都有各自的好处,不论是哪种编程语言或者技术,都没有好坏区别,学精一门,总没有错。而且Java与.net都是面向对象的语言。

首先来看下java的应用:

1、Java是跨平台的,而且Java开发的安全性最高,线程很好控制,运行速度是依据框架而定的,如果用Struts开发Web它的速度会比较平均,但是用JSF它的启动很慢,一旦加载完毕后速度飞快,只要不清楚浏览器记录,就会永远保持此速度。但是Java也存在许多问题,比如开发速度及其缓慢,搭建框架时需要弄许多配置文件。

2、java是跨平台的,意味着"一次编写,到处运行"。编写完了可以再linux和ux也可以一字不改的放在windows运行,.net只能在windows运行,但是windows广泛,所以也占有率高。

3、java安全性,运行环境是一个封闭环境,像沙箱一样,如果下载一个程序有破坏性,沙箱能判断出并起到保护作用.使得很多对安全性要求高的使用java,如:军队,金融,航空等。

4、java是健壮的,如果编写过程中,错一个标点符号,能及时的发现修改。不像c语言,汇编等,不能及时发现类似标点之类的错误,风险很大。

5、java简单强大,不需要一个一个自己编写,直接调用组件即可,所以功能是很强大的。

而.net的应用则比较偏向于效率上:

1、.NET是微软的王牌,不能跨平台,运行时速度和Java基本不相上下,但是.NET的开发速度很快,安全性总是.NET开发者的瓶颈,在有就是在.NET中的线程很难控制;

2、.net的编程效率高,只需要鼠标拖拽即可实现;

3、.net运行效率高,不能跨平台,所以都是自己的东西,效率高;

4、性能上,中小级的运用,.net效率更高一些,浏览下载速度更快,但是百万级后不如java。

java平台沙箱安全模型包含以下哪几个安全组件

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

2、自动垃圾收集.

3、数组边界检查.

4、空引用检查.

5、数据类型安全.

flex 用socket连接JAVA时 的安全沙箱问题

关于Flex安全沙箱问题的解决最近遇到了Flex安全沙箱问题,找了很多资料发现不是都是和我的程序相关,我的程序需要socket连接,而大多数讲的都是跨域文件读取的。我就把这些方法都总结出来:跨域文件读取方法一:在目标服务器上布署crossdomain.xml文件(我用的此方法很管用,放上就没问题了)需要远程服务根目录定义有crossdomain.xml文件,如下:?xmlversion="1.0"encoding="UTF-8"?cross-domain-policyallow-access-fromdomain="*"//cross-domain-policy方法二:使用代理,把Flex要访问的远程文件通过asp,php,jsp等脚本读取到本地,然后再由Flex去访问;方法三:使用Adobeflashplayer9打开程序后,点击菜单栏中文件-创建播放器...即生成exe文件,运行exe文件即可突破安全限制;方法四:1、找到这个文件夹:c:\DocumentsandSettings\UserName\ApplicationData\Macromedia\FlashPlayer\#Security2、在其下建立一个名为"FlashPlayerTrust"的文件夹3、在"FlashPlayerTrust"文件夹下新建一TXT文件,内容如下:c:\d:\e:\f:\4、将该txt文件命名为:"myTrustFiles.cfg"再打开你硬盘里的SWF文件,就不会出现那个烦人的安全设置提示窗口了!方法五:用HttpService它默认是有Proxy的,需要配置flex-config.xml,里面有一段:http-service-proxywhitelist………………/whitelist/http-service-proxy这个是白名单,一般情况下是注释掉的,也就是默认只有本地的http://{localserver}/*和https://{localserver}/*可以访问。其他的需要在flex-config.xml里的自行修改成需要的就可以了。访问本地自然不会跨域,不过你肯定访问局域网其他机器了,所以是依照白名单规则,属于跨域Socket沙箱问题在Flex安全沙箱中使用Socket进行通信时,也会受到Flash9的新安全策略的困扰.解决方法不能像在Web服务器中布置一个crossdomain.xml来解决,或是在服务器上专门开启843端口来提供安全策略.有一种方法就是在接收到客户端的连接后,向其发送安全策略.比如我是用JAVA来开发,客户端的Flex会先搜索同域,及服务器的843口,看是否能得到安全策略,这时候Socket是先建立好的,可以在接收到Socket,即Accept事件发生是,马上向其发送策略串,否则客户端就会因为安全策略不过关,于断开,如果成功获取策略,则客户端将断掉先前的那次Socket,再真正进行程序中你要求的Socket连接请求.

java平台沙箱的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java平台沙箱安全模型包含哪些安全组件、java平台沙箱的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-15,除非注明,否则均为首码项目网原创文章,转载请注明出处。