2.5. 安全程序类型

许多不同类型的程序可能需要成为安全程序(正如本书中定义的术语)。一些常见的类型包括

本书将这些不同类型程序的问题合并为一个集合。这种方法的缺点是,此处确定的一些问题并不适用于所有类型的程序。特别是,setuid/setgid 程序有许多令人惊讶的输入,并且此处的一些指南仅适用于它们。但是,情况并非如此明确,因为特定的程序可能会跨越这些边界(例如,CGI 脚本可能是 setuid 或 setgid,或者以具有相同效果的方式配置),并且一些程序被分为多个可执行文件,每个可执行文件都可以被认为是不同“类型”的程序。将所有这些程序类型放在一起考虑的优点是,我们可以考虑所有问题,而无需尝试将不适当的类别应用于程序。正如将要看到的,许多原则适用于所有需要保护安全的程序。

本书略微偏向于用 C 语言编写的程序,并附带一些关于其他语言(如 C++、Perl、PHP、Python、Ada95 和 Java)的注释。这是因为 C 语言是在类 Unix 系统上实现安全程序的最常用语言(CGI 脚本除外,CGI 脚本倾向于使用 Perl、PHP 或 Python 等语言)。此外,大多数其他语言的实现都会调用 C 库。这并不是暗示 C 在某种程度上是用于此目的的“最佳”语言,并且此处描述的大多数原则都适用于任何编程语言。