19、确保 Java 中对象安全初始化

确保 Java 中对象安全初始化

一、引言

信息系统的初始化通常是一个关键阶段,在此期间会安装重要的防御机制并建立一致的状态。在面向对象软件中,访问部分初始化的对象是一项需要谨慎处理的操作,应尽量避免或严格监控。CERT 对于安全 Java 开发的建议明确要求不允许访问部分初始化的对象,若不遵循此建议,风险等级高且可能性大。

Java 语言和 Java 字节码验证器(BCV)对对象初始化实施了一些规则,例如构造函数的执行顺序,但它们并未直接执行 CERT 的建议。Sun 提供了一个指导方针来执行该建议,然而不遵循这些指导方针可能会悄然导致安全漏洞。例如,曾有著名攻击利用部分初始化的类加载器进行权限提升。

为了解决这个问题,我们提出了一个双重解决方案:一是模块化类型系统,用于表达库或程序的初始化策略;二是模块化类型检查器,可集成到 BCV 中,在加载时静态检查程序是否符合策略。我们对类型系统进行了形式化定义,并使用 Coq 证明助手对其健全性进行了机器检查,还在大量 Sun 的 Java 运行时环境(JRE)类上进行了实验验证。

二、相关工作

从不同角度对对象初始化进行了研究:
- Freund 和 Mitchell :提出了一个类型系统,形式化并执行了 BCV 确保的初始化属性,但这些属性不足以确保不访问部分初始化的对象。
- Fähndrich 和 Xia、Qi 和 Myers :专注于执行字段的不变量,并精细跟踪对象的不同字段,还尝试跟踪对象构造后的状态以获取更多初始化字段的信息,但在我们的场景中这种做法有些过度。
-

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值