8.1. 仅调用安全的库例程

有时,安全性和抽象(信息隐藏)与重用的开发原则之间存在冲突。问题是一些高级库例程可能以安全或不安全的方式实现,并且它们的规范不会告诉您。即使特定实现是安全的,也可能无法确保例程的其他版本是安全的,或者同一接口在其他平台上是安全的。

最后,如果您的应用程序必须是安全的,您有时必须重新实现您自己版本的库例程。基本上,如果您不能确定库例程将执行您为安全所需的必要操作,则必须重新实现例程。是的,在某些情况下,库的实现应该修复,但是如果您选择一个作为安全漏洞的库例程,那么您的用户将受到伤害。如果可以,当您必须重新实现某些内容时,请尝试使用高级接口 - 这样,您可以在其使用安全性的系统上切换到高级接口。

如果可以,请测试以查看例程是否安全,如果安全则使用它 - 理想情况下,您可以将此测试作为编译或安装的一部分执行(例如,作为 ``autoconf'' 脚本的一部分)。对于某些条件,这种运行时测试是不切实际的,但对于其他条件,这可以消除许多问题。如果您不想费心重新实现库,至少要测试以确保它是安全的,如果不是,则停止安装。这样,用户就不会意外安装不安全的程序,并且会知道问题是什么。