Java虚拟机是如何实现安全性?

来源:互联网 发布:博雅立方 知乎 编辑:程序博客网 时间:2024/06/05 00:08

前言

不知道是不是跟安全有缘,还是巧合,今年拿到的两家都是安全部门,一家中兴,一家趋势,在趋势面试时,针对安卓安全的争论,自己恰巧看完虚拟机安全这方面的介绍,因此在周边都是985高校硕士的辩论会上居然显得特别突出,吐出的一个个名词,让身边的人都以为我是做过安全方面的,这也恰是因为我们太不重视安全了,作为程序员,我们剥离了这个概念,殊不知,一切都离不开“安全”二字,因此,今天开始,我要谈谈安全,冷门的知识,关注的人还是比较少,但是我就喜欢看这些,发现自己的不足,才更要去关注。


正文

1.为什么需要安全性

Java作为一门适用于网络的语言,自然离不开网络,网络让我们的电脑互联互通的同时,也随着隐藏着很多隐患,黑客作为网络的“捣蛋大师”,利用网络的漏洞,随时都可以攻击我们的计算机,最近比较火的“比特币病毒”事件,造成很多用户电脑文件被锁死,动弹不得,医院,银行网络陷入瘫痪,这是多么可怕的一件事,黑客利用自己的技术,不断的作恶,因此,维护一个安全健康的网络环境是政府和每一个公民都在倡导跟坚持的。

软件都是通过网络下载,再本地计算机运行的,例如Java applet 和Jini服务对象就是这样的,每当用户打开浏览器浏览网页的时候,applet的class文件都会被自动下载到本地,这是在很多用户根本没有察觉的情况下,初衷是提高用户的的体验,但细思极恐,如果吓呆的代码是安全的还好,但是于丹不可靠来源的applet怎么办?同样,当Jini服务对象查找服务进行服务注册的时候,它的class文件将从服务供应商指定的代码库下载,Jini实现了一个自发的网络互联,在这个网络中,客户机进入了一个新的环境,并企通过网络可以使用提供的服务,当然,服务器端也可以使用客户机提供的服务,如果没有安全机制的存在,那么,无疑是给了恶意代码的发布提供了途径,这样的传播是很快的。

Java的安全模型侧重于保护终端用户免受从网络下载的,来自不可靠来源的,恶意程序(以及可靠程序中的一些错误bug)的侵犯导致计算机无法正常工作。


Java虚拟机给用户提供了一个可配置的“沙箱”,在沙箱中可以防止不可靠的Java程序,沙箱内部运行的代码的权限被限制了,程序只可以在沙箱允许的范围边界内做任何事,但是不能跨越边界,因此,通过这样的限制,让程序的运行在一个可控的范围,最初版本1.0中

  • 对本地硬盘的读写操作

  • 进行任何网络连接,但不能连接到提供这个applet的源主机。

  • 创建新的进程

  • 装载新的动态连接库

后期使用中感觉到1.0版本最初沙箱的限制太严格,一些善意的代码常常都无法正常有效的工作,在1.1版本,得到了改进,引入了代码签名和认证的信任模式,签名和认证使得接收端系统可以确认一系列class文件已经由作者进行了数字签名,并且在签名以后,这些class文件并没有改动过,这就使得终端用户和系统管理员减少了在沙箱中对代码的限制,但是这些代码必须保证已经被可信任的团体数字签名。


在1.1版本发布的安全API包含了认证的支持,但是我们,发现这样的方式就将代码分成了两类,一类是完全信任的,一类是完全不信任的,实际上,这样的方式,并没有提供太多的实际帮助,下节,我们会继续聊,感兴趣的一定关注哦!

原创粉丝点击