The end of a matter is better than its beginning, and patience is better than pride. | |
Ecclesiastes 7:8 (NIV) |
在Linux和Unix这样的类Unix系统上设计并实现一个真正安全的程序实际上是一项困难的工作。其困难在于,一个真正安全的程序必须对所有可能的输入以及被某个潜在怀有敌意的用户控制的环境变量做出恰当的响应。安全程序的开发者必须对他们所用的平台具有深刻的理解,寻找并使用手册指南(例如本文),并采用保证过程(例如仔细检阅)来减少程序中的薄弱环节。
最后,下面是本文中的一些关键指导原则:
证实所有的输入,包括命令行输入、环境变量、CGI输入,等等。不要仅仅拒绝“坏的”输入;定义“可接受”的输入并拒绝不符合的任意输入。
避免缓存溢出。 这是当前主要的编程错误。
设计程序内部结构。 确保接口的安全、最小化特权、使初始配置和缺省值安全以及安全失败。避免竞争状态,只信任可信赖的通道(例如绝大多数服务器程序都不应该信任其客户程序的安全检查)。
小心对其它资源的调用输出。 限制调用输出值为合法值(特别注意转义字符),并检查系统调用的所有返回值。
明断地发回信息。 特别是最小化反馈并处理对某个不可信用户的完整的或不响应的输出。