编程语言视角下的计算机安全与密码协议需求规范
编程语言中的安全机制
在编程领域,保障程序的安全性至关重要。程序的执行过程涉及多种操作,包括程序源代码的解释(如果可用)、插入运行时检查的源代码编译、虚拟机代码(如 JVM)的字节码解释、即时编译虚拟机代码,以及对预编译机器代码进行额外检查(软件故障隔离)。
为了减少动态类型检查的运行时开销,在实际执行前的程序分析阶段进行一些静态类型检查是很有必要的。源代码的静态类型检查很常见且易于理解,但对于不可信代码,其源代码并非总是可用。而且,从源代码到可执行文件的编译器中的错误可能会在类型检查后引入类型违规,也就是说编译器是可信计算基的一部分。为避免这些缺点,可以对低级的编译代码进行静态类型检查。例如 Java 字节码验证,它在动态加载时对 JVM 字节码进行静态类型检查;Typed Assembly Language 则更进一步,对实际微处理器(如 Intel x86 系列)的汇编代码进行静态类型检查,包括异常处理的栈展开等高级用法。
不过,Java 字节码验证和 Typed Assembly Language 仍有一些与类型安全相关的检查需要在运行时进行,如数组边界检查或 Java 的向下转型。基于依赖类型的更高级类型系统被提出,用于实现数组边界检查等的静态验证。Proof - carrying code 则将这种方法推向极致,用通用程序逻辑中的静态证明检查取代静态类型检查,代码提供者不仅提供编译后的代码,还提供代码满足特定安全属性的证明,代码使用者检查该证明以确保代码符合要求,这些属性通常包括类型正确性和内存安全性,还可能涵盖代码更精细的行为方面。
访问控制的实现
访问控制检查所实施的安全策略
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



