Science for all





Chapter 9. 特定语言的问�?

Chapter 9. 特定语言的问�?

 

Undoubtedly there are all sorts of languages in the world, yet none of them is without meaning.

 1 Corinthians 14:10 (NIV)

有许多特定语言的安全问�?。许多可以做如下总结:

  • 在实际可行的地方打开所有可用相关的警告和保护机制。对于编译语言,这包括编译机制和运行机制。一般情况下,与安全相关的程序应该在打开所有告警的条件下顺利编译。

  • 应该避免语言中危险和不赞成的操作。所谓“危险”,�?�指很难正确使用的操作。

  • 应该确保语言的基本结构(如运行库)�?�可用和安全的。

  • 自动收集垃圾字符串的语言应该特别小心地立刻清除�?密数据(特别�?�密钥和密码)。

  • 准确地了解所用操作的语法。从文档中查看操作的语法。除非可以确信返回值�?�不相关的,否则不要忽视它们。对于像C那样不支持异常的语言这一点很难做到,但事情就�?�这个样子。

C/C++

C和C++程序最大的安全问�?就�?�缓�?溢出;参见有关缓�?溢出一章以了解更多信息。C�?有个额外的弱点就�?�不支持异常,这就使得在编程时很容�?�忽略关键的错误状态。

对于使用gcc进行C或C++编译,应该至少使用以下编译标识(打开一大批告警信息)并力图消除所有告警(注意,使用-O2�?�由于有些告警只能被在更�?的�?化情况下执行的数据流分析所检测到):

gcc -Wall -Wpointer-arith -Wstrict-prototypes -O2

对于发现潜在的安全漏洞可能会找到有些很有用的审计工具。下面就�?�几个这样的工具:

  • 可靠软件技术(RST)的ITS4静态地检查C/C++代码。ITS4通过对源码执行模式匹配来进行工作,寻找已知可能危险的模式(如特定的函数调用)。ITS4对于非商业用途�?�免费的,包括其源码和特定的修改与重新发布的权利。警告,该工具的许可声�?�可能最初被误用。RST宣称ITS4�?�“开放源码”,但实际上它的许可证并不符合开放源码定义(OSD)。特别�?�ITS4的许可不符合第六点,即禁止在开放源码许可中�?在“只用于非商业用途”的条款。可惜的�?�RST坚持用“开放源码”一词来描述他们的许可。ITS4�?�个�?秀的工具,发布所用的许可证对于商业软件而言相当慷慨,虽然这样使用“开放源码”一词会给人以试图在没有真正开放源码的情况下赢得开放源码的名声的感觉。RST说他们只�?�不接受OSD的定义,希望换用一个不同的定义。从法律的角度而言,没人反对他们这么做,只�?�使用OSD定义的包括超过5000个软件计划(至少那些由位于http://www.sourceforge.net的SourceForge主持的软件计划�?�这样的)、Linux发行商、Netscape(现在�?�AOL)、W3C、记者(如Economist的记者)以及其它组织。大多数程序�?不想艰难地通过许可协议,所以使用其它的定义会造成混乱。我不相信RST有意制造误解;他们�?�一家声誉良好的公司,其人�?也�?�声誉良好而且诚实。不幸的�?�他们采用的特殊姿态导致了(以我的观点)不必要的混乱。不管怎样,可以从 http://www.rstcorp.com/its4 获得ITS4。

  • LCLint�?�静态检查C程序的一个工具。最低程度LCLint也可以作为更好的lint。如果增加了程序注解,LCLint就可以在标准lint功能之外执行更进一步的检查。该软件使用GPL许可证,可以从 http://lclint.cs.virginia.edu 处获取。