Java
- 格式:pdf
- 大小:141.67 KB
- 文档页数:3
-T£C H N O LOG y @ L"j i .
、.
J a V a安全性问题
Tava是由美国的SUN公司发展 J出来的第一种韵在胁m 上面 具有软硬伟平台无关性的程序设计语育。 J 一推出即}f起垒世界的荚桂。Javai ̄ 言的特性使它可以最大驻度地剿用羽培。 用lava缩写的程序磐为两种,一种是比 较短小的运行在Web浏览器上的程序, 称为Java Applet,它是动态、安垒,跨 平台的网培应用程謦。 JavaAppk ̄ HTML语言,通过 主页发布到lnternet。障珞用户访问服务 器的Appiet时,这些Al: ̄et腹网络上进 行传输,然后在支持lava豹稠蜷器中运 行。另一种是可翳离i螬箍嚣运行的应用 程序fapplication)。Intemet的西虢发展 及万维两www的靛建增长,推黏了 Java语言的飞速发腔 檀藉Java遥新威 为Internet上最受教避的开发与缩程语 言,其应用锈域非常广泛 Java技术自出现以来,一直都将系 统安垒性作为重要盼皱垤目标 JAVA的 安全攘塑不回于传辘韵蠹垒方槎,转统 的安全方{击中,太茹藏辩捧累筑囊许应 用程序充分访阊系挠舞鼙,在撼捧幕坑 不提供安全保护的揽嚣矍,运行环境不 扼被信任。为了辩捧选十映路,安垒策略 经常要求在应用程序执行之前对应用程 蒋学英
性体系结构中 防止些“别有 心” 的程序破坏系统,但是它仍然存在一些 尚未解决的问题 这些问题将会直接影 响到Java的安生性 而一直以来,很多 程序员都肚为、Java程序只要是在虚拟 机一屠安全了,整个应用程序就安全 了。这样的理衅是存在着极大的欠娃 的。 实际上,Java的安全问题大致口』以 分为四个方面:虚拟机安争、亨节码安 全,应用程序安争以及嘲络安全。下面 我们分三个部分束讨论这四个方面的安 全性问题。
一 Java虚拟机和字节码的 安全问题 Java是用虚拟机的理论来实现 Java【的软硬件平台无关性的 虚拟机安 全一直都是开发』、员关注的焦 。由于 Java过去主要是作为下载到本地执行的 小应用程序开发语言.下载下来的代码 的安全性和执行环境就是异常重要的事 情。这种情况下的安全意昧着正确安装 类装载器和安全管理器 及验证下载的 代码。医此,Java最初的安全问题就只 是虚拟机和字节码安全l 题。 为了特Jaya AppleI巅人网页,同 页编程人员在网页中放^HTML标志 来通知用户的浏览器有~个J a v a Applet嚣要运行,这样.一个与Java兼 容的测览器在碰到<APPLET>标志后 就会下载响应的娄文件,服务器将娄 文伟发送给浏览器,这时Web浏览区 /开簟暴娆世界, 就把这 字节代码的娄文件交给 Java虚拟机,鲫果Java虚拟机绎过 系列步骤确认次applet是叮信任的. 它就将这个applet翻译或机器、然后 由Java的一些组件,包括JavaApplet 类装^器、App[et柱验 &pplet安全 十牛管理器,来完成代码装^和姣验安 全往的一系列上作,然后再编译执 行 在这个过程中,Java Applet使用 sand box安全模式,通过限制appiet 的访问 域柬保护用 区域不被^ 侵。这些 域叫命名空 ,是Java虚 拟机用 存储J a v a娄的一块内存空 问。 实际上,Java虚拟机为她所下载的 每个Java娄分配块空间.然后载人 器与校验器起来确保没有任何类越过 它的明明空问去 问别的类的命名卒 问。Sandbox applet是标准的applet.它 受限访问用户的系统资源:它 能 方问 用白的硬盘、中J开额外的传精通道, 只能逗眦一 关于appke[运行的基本 信息 然而.还有一种Java娄被称为可 信任的Java applot,它是Java模式的 一种新变异娄型。一个可信任的Java applet可访问所有的系统资源 通常这 样的可信任appler ̄都是由一个组织创建 并用于 业内部的. 如果一此“恶意” 的人创建r“另有所图 的町情任 ap ̄let.耶么.Ja,la的蛀拟帆和字节码 安全问题就不象大家所想象的那样 r。这是罔为存Java虚拟机通过网络
献服务器上F载娄代码时,它并没有办 维普资讯 http://www.cqvip.com 洼知道这些字节码是否能安全执行。安 全的字节码永不会指示虚拟机执行让 Java运行时处于不懈调和无效的状态。 通常情况下,Java编译器可以确保 创建的娄文件里的字节码是安全的。然 而也可以手工写出Java编译器不允许 的字节码 Java校验器以一系列极富想 像力的方祛检查所有这样的字节码井验 证那些不台规范的代码。如果校验器真 的接要求正常工作的话,那么一旦校验 完戚,Java虚拟机就知道程序代码是安 全的。 构成J ava虚拟机安全问题的另 一个问题是类型混乱问题 类型的概 念对J a v a编程语言来说是浑然一体 的。每个值都同一种类型相关联, J a v a虚拟机就是用值的类型来决定 什么样的操作可以怍用在什么样的值 上 程序的类型信息对于虚拟机安全 是至芙重要的。因此,一个被恶意的, 未经验证的代码启动的类型混淆攻击 会试图让J a v a虚拟机相信伪装成为 一个娄实列的内存块确实是是另一个 娄的实列.以此进行攻击。如果攻击 成功,程序就会以设计者意想不劲的 方式来操怍类宴列。这种攻击称为 “类型混淆攻击”,因为虚拟机在这种 情况下已经闹不清被修改的类的类型 到底是哪种了。如果类经过了完全的 验证,那么 类型混淆攻击”是不会 发生的:在上面的第二个列表中,校 验器捕获了这个企图并抛出了异常 也就是说.只要枝验器没有被关闭或 是被绕过,那么安全就是能够保障 的 二 应用程序的安全问题 程序开发中的微小错误都可能给 开发人员和用户带来很大的安全问题 很多人都以为只有那些或有意或无意的 黑客们在开发一些危及到系统的安全性 的程序却往往忽略了自己在进行程序 开发的过程中无意识地留下的一些漏 洞,将给自己的应用程序带来巨大的安 全隐患。 在讨论J a v a的虚拟机的安全问 题时我们就已经知道了,在Java校验 器中的漏洞将使一些人有机可乘 在 利用J a va进行程序设计是也同样存 在这样的情况,而且.这样的漏洞必 然还很多.一时也雌 察觉。这样的 漏洞就为黑客们提供了大量的帮助和 机会。随着在Java虚拟机领域里的明 显的漏洞的不断发现和修补,Java的 安全问题已经从J ava虚拟机安全转 向到运行于其上的应用程序安全。由 开发者在程序中造成的安全孺洞将会 带来长时间的影响和损失。囤此, J a v a的第二个安全问题在于应用程 序的安全问题。马虎l槲 的ft码编 写,不熟练的编程技能 及不充足的 系统测试都会带来安全漏洞 作为开 发者,应用程序的设计以及代码实现 是非常关键的。在应用程序的安全问 题中.可以大致归结为以F几点: 1定时问题 最有害的定时问题是资源竞争问 题。这样的问题会在当两个没有经过适 当同步的线程同时争夺同个资源时发 生。在这两个互相影响的线程或者是在 不懈调,无效的状态下放弃对象,或者 是当恶意代码利用了正被另一十线程使 用又没有被很好的保护的资源时,安全 漏洞就会出现。通常的解决办祛就是加 上同步措施。 2 不充分的输入校验 系统的输A在使用前一定要经过 检验。尽管某些输人是来自信任源,但 出于安全考虑,所有这些输A都应该 看作不被信任的,危险源。未经完全检查 的输人可能带来大量严重的安全弱 。 3 不当的随机数 ’TEc HNO LoGY JAVA专栏
好的加密系统需要高质量的随机数 发生器。早前NeLm.,ape Na,Agator的夫量 安垒漏洞直接就是来自于不适当的随机 数发生器 随机数发生器产生的有效密 匙达不到建议的长度,结果很容易遭到 破解。 4设计缺陷 由F设计上的姨乏长远统筹的考 虑,对语言及函数库的理解不够克丹 而带来的安全性漏洞比在代码实现时 的漏洞更可怕。这种漏洞通常使程序 逻辑纠缠不清.必颓花大量的时间和 耐心来艇决 5初始化问题 非常规的方法创建实例,很永远将 娄的安全系统破坏。 6 可见性和扩展性问题 可见性(类或是其成员是否是公共 的或是私有的),扩膀陛(子类是否能继 承一个类或是方法)为软件开发人员提 供了非常重要的工具。这两种娄型如果 使用不当,也会造成一 微妙的漏洞。 在子娄化的例f中,一个子类可以改变 由超类继承而束的约定,定义。扩展后 的代码使用,些自己的约定就可能破坏 程序安争。这类问题的解决办法就是: 台理使用“final 关继字,防止子类进 行重定义 同样,你可以通过使用荚键 字 private”防止娄内部流程和状态被 惨改。 7绝不要放置“后门” “后门 是程序员为了便于自己开 发调试程序时所设置的避A程序的便捷 通道。如果这样的便捷通道被黑客所破 解,那整个系统就没有什么安全可言 了。因此,一定不能在程序中设置“后
不管怎样,Java在安全性方面还是 很优越的。比如在C/C+I里面固指针 和缓存溢出带来的安全性问题在Java 中都已经避免掉了。当初SUN公司为J,
81 Linux w ̄rl
d 维普资讯 http://www.cqvip.com Jaya
本 嚣.在用传统的语育{鲁程时,程序.鞋1只能 叠过函数的返回值来发出蔼误信息。这易 于导致覆多错误,西海在校多情况下需要 知道错误产生的内部 带。通常.用全局 变量eml0来存储 异常 鹌粪型。这霹易 导致误用。因为一十嘲∞箱罐有霄_甚在被 魁强翦麓另外的错误羲夔掉. 即使最优美的C话富寝謦,为 娃理 异常 情况,也常隶髓子痿哟语旬。Java 辩 异常 扮她瑗蹙礴向赭豢钧 一个Java 静勘 m是一十撬遽 异鬻 情撵的对 羹 当出现。异常 博髓肘,一个EXl ̄:ioIl 对象就产生了 并放弼产生这个 异常 的 戚煎荫敷里 下弼我黎弹鼬卉鲴Java的韵 异常 处理方鞋. 1.基础 Java【的 异常 娃理是通过5十关键 词来实现的≈try, ̄h,dlrow,thrco ̄s和 finally。用廿y来执行一段程岸,如果出现 ⑨④⑥ ・ 一 .
异常处理技术
小丫
异常”.系境地出{mr0w 一个“异常” 你可 通过它的类型柬捕捉(catch)它, 或最后由缺省处理器来处理 下面是 “异常”处理程序的基本形式: try //程序块} catch(Exception Fype】e){// 对ExceptionT}2 ̄el的处理j catch(ExceptionType2 e){// 对ExoaotionType2的处理j throw(e);{//再地出这个异常
2.“异常“的类型 在 异常”娄层次的最上层有一个 单独的娄叫做Thmvcable 这十娄用来 表示所有的”异常”情况 每十“异常 类型都是T h r 0w a b1 e的子类。 Throwable有两个直接的子娄。一类是 Exception,是用白程序能够捕捉到的 “异常”情况 我们将通过产生它的予 娄来创建自己的“异常”。男‘娄是 Error,它定义了通常无法捕捉到的“异 常 。要谨慎使用Error 菱,因为它们 通常会导致灾难性的失败。在Excep [1Oll中有一十F攒RuntimeException, 它是程序运行时自动地对菜错误作出反 应而产l牛的。 3.不捕捉“异常” 异常”对象是Java在运行时对某 “异常“情¨兄作出反应而产生的;例如, F面这个小程序包含一个整数被0球的 舁常”: class ExcO{ public static void[nam(Sb args [】) { im d-0; int a=42/d