b) 当要求重新分配存储器的调用时应予以检查,以确保不仅释放指针而且释放该结构所用的存储器。
c) 运算符优先级的规则,一些语言的要求并不是那么严格,容易是程序员发生误解。
如果某种语言有精确的定义(也有完备的功能性),从逻辑上说是清晰的,有易管理的规模和复杂度,那么就认为这个语言适用于安全相关性软件。使用编程语言时,也应该针对该语言的特点,努力满足安全性要求。
如果一种编程经验或编程风格因为能够提高软件安全性而被公认为专用性编码标准,可以选择这样一种编码标准来约束对不安全语言的使用。编码标准对程序员的编程修养和对语言正确使用是有指导意义的。MISRA协会在1994年发布了它的软件开发指南,在其中特别指出了为考虑安全集成度而做出的语言、编译器和语言特性的选择。MISRA要求使用“标准化结构化语言的受限子集”,其对语言检查的严格性已经使该规范应用在一些安全要求很高的系统相关代码上。
4. 软件详细设计安全性分析——设计实现是否符合安全性要求
软件详细设计进一步细化高层的体系结构设计,将软件结构中的主要部件划分为能独立编码、编译和测试的软件单元,并进行软件单元的设计。
在这一阶段中,需要依据软件需求、结构设计描述、软件集成测试计划和之前所获得的软件安全性分析的结果,对软件的设计和实现阶段是否符合软件安全性需求进行验证。
相关软件单元应进一步细化设计以便于编码。所以,我们应该分析:
a) 软件详细设计是否能追溯到软件需求;
b) 软件详细设计是否已覆盖了软件安全性需求;
c) 软件详细设计是否与软件结构设计保持了外部一致性;
d) 软件详细设计是否满足模块化、可验性、易安全修改的要求。
软件详细设计是直接关系到编码的关键一环,软件详细设计安全性分析更相关整个软件的安全性。所幸的是,众多前辈们总结了许多可以提高软件安全性的手段和技术,这些经验经过长期验证,多数已经成为标准的参考:
设计逻辑分析:
评价软件设计的方程式、算法和逻辑,可以包括失效检测/诊断、冗余管理、变量报警和禁止命名逻辑的检测。