C和C++安全编码(原书第2版)
上QQ阅读APP看书,第一时间看更新

1.3.4 其他语言

由于C本身存有这些内在的问题,因此很多安全专家推荐使用其他语言,例如Java。尽管Java解决了C存在的很多问题,但它仍然容易导致实现层次或设计层次的安全缺陷。Java原生接口(Java Native Interface,JNI)允许Java与用其他语言编写的应用程序和代码库进行交互,使得最终的系统可以由Java和C或C++写的组件组合而成。

考虑到已有的对C源代码、编程经验以及开发环境的投资,Java往往并非是一个可行的方案。有时出于性能或其他和安全无关的因素的考虑,也可能会选择C。不管是什么原因,只要选择了用C和C++开发程序,产生安全代码的重担很大程度上就落到了程序员的肩上。

另一种选择是使用C的方言,如Cyclone[Grossman 2005]。Cyclone的设计目标是在保持C的语法、类型、语义和惯用法不变的基础上提供与Java同样的安全保证(使得任何合法的程序都难以产生安全漏洞)。Cyclone目前在Inte l32位架构(IA-32)的Linux以及Windows(使用Cygwin)得到了支持 [1]

尽管有这些特点,但对于工业应用,Cyclone可能不是一个合适的选择,因为该语言相对不流行,随之导致工具和程序员的缺乏。

D是一门适用于系统和应用程序的通用编程语言。D主要基于C++语言,但去掉了诸如C源代码的兼容性和与C++链接兼容性等功能,使得D提供了消除或至少减少常见编程错误的语法和语义结构[Alexandrescu 2010]。

[1] Cygwin是一种适用在Windows上的类Linux环境。