这篇是计算机类的优质预售推荐>>>>《C安全编码标准:开发安全、可靠、稳固系统的98条规则(原书第2版)》
部分目录
译者序
前言
贡献者简介
第1章 预处理器(PRE) 1
1.1 PRE30-C. 不要通过连接创建通用字符名称 1
1.2 PRE31-C. 避免不安全宏参数的副作用 3
1.3 PRE32-C. 不要在类函数的宏调用中使用预处理器指令 7
第2章 声明和初始化(DCL) 9
2.1 DCL30-C. 声明具有正确存储持续期的对象 10
2.2 DCL31-C. 在使用前声明标识符 13
2.3 DCL36-C. 不要声明具有冲突链接类别的标识符 16
2.4 DCL37-C. 不要声明或者定义保留标识符 18
2.5 DCL38-C. 使用正确语法声明灵活数组成员 23
2.6 DCL39-C. 避免在结构填充中泄露信息 26
2.7 DCL40-C. 不要创建相同函数或者对象的不兼容声明 30
2.8 DCL41-C. 不要在switch语句第一个条件标签之前声明变量 35
第3章 表达式(EXP) 37
3.1 EXP30-C. 不要依赖求值顺序以避免副作用 38
3.2 EXP32-C. 不要通过非易失性引用访问易失性对象 42
3.3 EXP33-C. 不要读取未初始化的内存 44
3.4 EXP34-C. 不要对null指针进行解引用 52
3.5 EXP35-C. 不要修改具有临时生命期的对象 56
3.6 EXP36-C. 不要将指针转换为更严格对齐的指针类型 59
3.7 EXP37-C. 用正确数量和类型的参数调用函数 62
3.8 EXP39-C. 不要通过不兼容类型的指针访问变量 67
3.9 EXP40-C. 不要修改常量对象 72
3.10 EXP42-C. 不要比较填充数据 73
3.11 EXP43-C. 使用restrict限定的指针时避免未定义行为 75
3.12 EXP44-C. 不要向sizeof、_Alignof或者_Generic传递有副作用的操作数 82
3.13 EXP45-C. 不要在选择语句中执行赋值 85
译者序
历数各种编程语言,可能很难有一种能够达到C语言的高度。凭借良好的移植性和跨平台支持,以及高效率的低级处理能力,C语言成为现代最流行操作系统平台的基石,也成为教育、研究和软件开发中最受人欢迎的语言之一。
C语言灵活的类型转换和贴近底层机器实现、目标代码效率高的特性,一直是系统软件开发人员最为喜爱的,但这也是一把双刃剑。随着软件系统的复杂度不断提高,编码中的一些小瑕疵越来越容易暴露出来,从而引发严重的安全问题,加之UNIX、Windows等主流操作系统的各种组件大多以C语言编写,黑客们乐此不疲地寻找着这些方面的漏洞,这给全球的计算机系统安全带来了严重的威胁。
在这种形势下,制定一种严格的安全编码标准,避免出现可利用的安全漏洞,就成为IT业界的当务之急。许多大型开发团体都制定了自己的安全编码标准,国际标准化组织也对C语言标准进行了修订,对C语言实现提出更严格的要求,从而为安全编码提供了基础。
本编码标准是业界采纳最广泛的编程指导原则汇编 ,它紧扣各个版本的C语言标准,分门别类地介绍了各种可能引发可利用安全漏洞的未定义行为、未指定行为,提出了安全编码的规则和建议,在每条规则和建议上都用现实的相容及不相容代码示例加以说明。本书是该标准文档的第2版,加入了对最新的C11标准的支持,对所有有志于C语言软件开发的技术人员来说,本书都是不可或缺的参考书。
本书内容极其丰富,正如作者所言,即便是C语言国际标准中,也存在着许多模糊之处,书中的例子和说明文字,就是要揭开层层迷雾,帮助读者认识很多并不那么明显但是可能造成严重问题的不当编程方法。在翻译过程中我们也深有体会,书中引用的标准条文中,确实有许多似是而非的东西,也许只有在细细咀嚼书中代码片段之后,才能逐步厘清。我们力求再现原书所要阐述的基本原理,希望能够真正地帮助到读者,但因水平所限,错误在所难免,期待广大读者批评指正。
本书的翻译工作主要由姚军完成,徐锋、陈志勇、谢志雄、方翊、白龙、林耀成、陈霞、宁懿、吴玥等也对翻译工作做出了贡献,在此衷心感谢机械工业出版社华章公司的关敏编辑和其他编审人员做出的辛勤努力。
部分前言
本书为C语言编码提供了规则。这些规则的目标是开发安全、可靠和稳固的系统,例如,消除可能导致程序意外行为和可利用漏洞的未定义行为。遵循本标准定义的编码规则是确保C语言开发的软件系统安全、可靠、稳固的必要条件(但不是充分条件)。安全和稳固的设计也是必要的,安全性关键系统通常会提出比编码标准更严格的要求,例如,要求所有内存都是静态分配的。然而,应用本编码标准将产生高质量的系统,这些系统可靠、健壮并且能够抵御攻击。
每条规则都由一个标题、一段说明和不相容/相容的代码示例组成。标题是规则的简洁描述,但是有时候不够精确。说明提出了规则的规范要求。不相容代码示例是违反规则的代码示例。搭配的相容解决方案展示了等价的代码,这些代码不违反该规则或者该编码标准中的任何其他规则。
具有良好文档、可以实施的编码标准是C语言编码必不可少的要素。编码标准鼓励程序员遵循由项目需求和组织确定的一组统一规则,而不是简单地采用程序员熟悉的方法。一旦确定,这些标准可以作为评估源代码(使用人工或者自动化过程)的指标。
CERT编码规则为业界广泛采纳。Cisco系统公司在2011年10月的Cisco年度SecCon会议上宣布在其产品开发中采用CERT C安全编码标准作为基准编程标准。最近,Oracle将所有CERT安全编码标准整合到现有的安全编码标准中。注意,这是长期协作中的最新步骤:CERT和Oracle以前合作编写了《The CERT Oracle Secure Coding Standard
for Java》(Addison-Wesley,2011)。
版权声明:本文为博主原创文章,未经博主允许不得转载。