安全程序的类型

许多不同类型的程序可能都需要成为安全程序(按照本文的定义)。一些通用的类型为:

本文把这些不同类型的程序都归为一类。这样做的不利之处在于本文指出的某些问题不适用于所有类型的程序。特别是setuid/setgid程序有很多令人惊奇的输入,本文有几条只针对它们的准则。然而事情并非如此简单界定的,一个特定的程序可能无法进行这样的分类(例如,一个CGI脚本程序可以setuid或setgid,或者进行有同样效果的配置),而且有些程序可以分为若干个可执行部件,每个都可以被认为是一个不同“类型”的程序。把这些不同类型的程序都归为一类的好处在于考虑问题时不会把一个不适当的类别应用在某个程序上。在下面你将看到,很多原则都可以应用到所有需要安全的程序上。

本文对C编写的程序有一些偏爱,也有一些关于其它语言如C++、Perl、Python、Ada95和Java的说明。这是因为C是在Linux下实现安全程序最普遍的语言(CGI脚本程序倾向于使用Perl),而且大多数其它语言的实现都调用C库。这并不意味着在实现安全程序时C是“最好”的语言,无论使用的是哪一种编程语言,本文所说明的原则绝大多数都适用。