C和C++安全编码

C和C++安全编码 pdf epub mobi txt 电子书 下载 2026

出版者:机械工业出版社
作者:西科德
出品人:
页数:227
译者:
出版时间:2010-1
价格:45.00元
装帧:
isbn号码:9787111261483
丛书系列:C++设计新思维
图书标签:
  • C++
  • 安全
  • C/C++
  • C
  • 编程
  • 计算机
  • 程序设计
  • 计算机安全
  • C++
  • 安全编码
  • 缓冲区溢出
  • 代码安全
  • 漏洞分析
  • 安全编程
  • 内存安全
  • 静态分析
  • 动态分析
  • 软件安全
  • C语言
想要找书就要到 本本书屋
立刻按 ctrl+D收藏本页
你会得到大惊喜!!

具体描述

《C和C++安全编码》是关于C和C++安全编码的著作。《C和C++安全编码》介绍了C和C++程序中已经导致危险的、破坏性的基本编程错误,包括在字符串、指针、动态内存管理、整数、格式化输出、文件I/O等中的漏洞或缺陷。《C和C++安全编码》还提供了对这些编程错误的深入剖析,并给出缓解策略,以减少或消除恶意利用漏洞的风险。

《C和C++安全编码》适合C/C++程序员、软件安全工程师参考。

洞悉软件漏洞的成因,熟知规避之道

通常而言,可利用的软件漏洞都由本可避免的软件缺陷所导致。在分析了过去10年中近18000份漏洞报告后,CERT/CC发现少量的根本原因导致了这些漏洞的产生。《C和C++安全编码》识别并解释了这些原因,而且展示了预防利用漏洞的步骤。此外,《C和C++安全编码》还鼓励程序员采用最佳安全实践,并培养安全的开发理念,这不但有助于保护软件免遭当前的攻击,更可使它们免遭将来可能发生的攻击。

基于CERT/CC的报告和总结,Robert Seacord系统地揭示了最可能导致安全缺陷的编程错误,展示了这些缺陷的利用方式,介绍了可能导致的后果,并提供了安全的替代做法。

《C和C++安全编码》特别讨论了如下技术细节:

改善任何C/C++应用程序的整体安全性。

抵御利用不安全的字符串操作逻辑的缓冲区溢出和栈粉碎攻击。

避免因对动态内存管理函数的不当使用而导致的漏洞和安全缺陷。

消除与整数相关的问题,包括整数溢出、符号错误以及截断错误等。

正确地使用格式化输出函数,避免引入格式字符串漏洞。

避免I/O漏洞,包括竞争条件等。

《C和C++安全编码》提供了许多针对Windows和Linux的安全代码、不安全代码以及利用程序的例子。如果你负责创建安全的C或C++软件,或者需要保持这类软件的安全性,《C和C++安全编码》为你提供了详尽的专家级协助。在这方面,其他任何书籍都望尘莫及。

作者简介

目录信息

译者序
序言
前言
作译者简介
第1章 夹缝求生 1
1.1 衡量危险 3
1.1.1 损失的现状 4
1.1.2 威胁的来源 5
1.1.3 软件安全 6
1.2 安全概念 7
1.2.1 安全策略 8
1.2.2 安全缺陷 8
1.2.3 漏洞 9
1.2.4 利用 10
1.2.5 缓解措施 10
1.3 C和C++ 11
1.3.1 C和C++简史 11
1.3.2 C存在的问题 12
1.3.3 遗留代码 13
1.3.4 其他语言 13
1.4 开发平台 13
1.4.1 操作系统 13
1.4.2 编译器 15
1.5 本章小结 16
1.6 阅读材料 16
第2章 字符串 17
2.1 字符串特征 17
2.2 常见的字符串操作错误 18
2.2.1 无界字符串复制 18
2.2.2 差一错误 20
2.2.3 空结尾错误 21
2.2.4 字符串截断 21
2.2.5 与函数无关的字符串错误 21
2.3 字符串漏洞 22
2.3.1 安全缺陷 23
2.3.2 缓冲区溢出 24
2.4 进程内存组织 24
2.5 栈粉碎 27
2.6 代码注入 30
2.7 弧注入 32
2.8 缓解策略 34
2.8.1 预防 34
2.8.2 字符串流 44
2.8.3 检测和恢复 45
2.9 著名的漏洞 48
2.9.1 远程登录 49
2.9.2 Kerberos 49
2.9.3 Metamail 49
2.10 本章小结 50
2.11 阅读材料 51
第3章 指针诡计 52
3.1 数据位置 52
3.2 函数指针 53
3.3 数据指针 54
3.4 修改指令指针 54
3.5 全局偏移表 56
3.6 .dtors区 57
3.7 虚指针 58
3.8 atexit()和on_exit()函数 60
3.9 longjmp()函数 61
3.10 异常处理 62
3.10.1 结构化异常处理 62
3.10.2 系统默认异常处理 64
3.11 缓解策略 65
3.11.1 W^X 65
3.11.2 Canaries 65
3.12 本章小结 65
3.13 阅读材料 66
第4章 动态内存管理 67
4.1 动态内存管理 67
4.2 常见的动态内存管理错误 69
4.2.1 初始化 69
4.2.2 检查返回值失败 70
4.2.3 引用已释放的内存 71
4.2.4 多次释放内存 72
4.2.5 不匹配的内存管理函数 73
4.2.6 未正确区分标量和数组 73
4.2.7 对分配函数的不当使用 73
4.3 Doug Lea的内存分配器 74
4.3.1 内存管理 74
4.3.2 缓冲区溢出 76
4.3.3 双重释放漏洞 80
4.3.4 写入已释放的内存 83
4.4 RtlHeap 83
4.4.1 Win32中的内存管理 83
4.4.2 RtlHeap的数据结构 85
4.4.3 缓冲区溢出 88
4.4.4 缓冲区溢出(再回顾) 89
4.4.5 写入已释放内存 92
4.4.6 双重释放 92
4.4.7 look-aside表 95
4.5 缓解策略 95
4.5.1 空指针 95
4.5.2 一致的内存管理约定 96
4.5.3 堆完整性检测 96
4.5.4 phkmalloc 97
4.5.5 随机化 98
4.5.6 哨位页 98
4.5.7 OpenBSD 98
4.5.8 运行时分析工具 99
4.5.9 Windows XP SP2 100
4.6 著名的漏洞 101
4.6.1 CVS缓冲区溢出漏洞 102
4.6.2 微软数据访问组件(MDAC) 102
4.6.3 CVS服务器双重释放漏洞 103
4.6.4 MIT Kerberos 5中的漏洞 103
4.7 本章小结 103
4.8 阅读材料 103
第5章 整数安全 105
5.1 整数 105
5.1.1 整数表示法 106
5.1.2 整数类型 106
5.1.3 整数取值范围 108
5.2 整型转换 109
5.2.1 整型提升 109
5.2.2 整数转换级别 109
5.2.3 从无符号整型转换 111
5.2.4 从带符号整型转换 112
5.2.5 带符号或无符号字符 113
5.2.6 普通算术转换 113
5.3 整数错误情形 113
5.3.1 整数溢出 114
5.3.2 符号错误 115
5.3.3 截断错误 115
5.4 整数操作 116
5.4.1 加法 117
5.4.2 减法 119
5.4.3 乘法 120
5.4.4 除法 122
5.5 漏洞 126
5.5.1 整数溢出 126
5.5.2 符号错误 127
5.5.3 截断错误 128
5.6 非异常的整数逻辑错误 129
5.7 缓解策略 130
5.7.1 范围检查 130
5.7.2 强类型 131
5.7.3 编译器运行时检查 131
5.7.4 安全的整数操作 132
5.7.5 任意精度的算术 136
5.7.6 测试 137
5.7.7 源代码审查 137
5.8 著名的漏洞 137
5.8.1 XDR库 137
5.8.2 Windows DirectX MIDI库 138
5.8.3 bash 138
5.9 本章小结 139
5.10 阅读材料 140
第6章 格式化输出 141
6.1 变参函数 142
6.1.1 ANSI C标准参数 142
6.1.2 Unix System V Varargs 144
6.2 格式化输出函数 144
6.2.1 格式字符串 145
6.2.2 GCC 147
6.2.3 Visual C++.NET 147
6.3 对格式化输出函数的漏洞利用 148
6.3.1 缓冲区溢出 148
6.3.2 输出流 149
6.3.3 使程序崩溃 149
6.3.4 查看栈内容 150
6.3.5 查看内存内容 151
6.3.6 覆写内存 152
6.3.7 国际化 156
6.4 栈随机化 156
6.4.1 阻碍栈随机化 156
6.4.2 以双字的格式写地址 157
6.4.3 直接参数存取 158
6.5 缓解策略 160
6.5.1 静态内容的动态使用 160
6.5.2 限制字节写入 161
6.5.3 ISO/IEC TR 24731 162
6.5.4 iostream与stdio 162
6.5.5 测试 163
6.5.6 编译器检查 164
6.5.7 词法分析 164
6.5.8 静态污点分析 164
6.5.9 调整变参函数的实现 165
6.5.10 Exec Shield 166
6.5.11 FormatGuard 166
6.5.12 Libsafe 167
6.5.13 静态二进制分析 167
6.6 著名的漏洞 168
6.6.1 华盛顿大学FTP Daemon 168
6.6.2 CDE ToolTalk 168
6.7 本章小结 169
6.8 阅读材料 170
第7章 文件I/O 171
7.1 并发 171
7.1.1 竞争条件 171
7.1.2 互斥和死锁 172
7.2 检查时间和使用时间 173
7.3 作为锁的文件和文件锁定 174
7.4 文件系统利用 176
7.4.1 符号链接利用 176
7.4.2 临时文件打开利用 178
7.4.3 unlink()竞争利用 180
7.4.4 受信文件名 180
7.4.5 非唯一的临时文件名 181
7.5 缓解策略 181
7.5.1 关闭竞争窗口 182
7.5.2 消除竞争对象 184
7.5.3 控制对竞争对象的访问 187
7.5.4 竞争侦测工具 188
7.6 本章小结 189
第8章 推荐的实践 190
8.1 安全的软件开发原则 191
8.1.1 机制经济性原则 192
8.1.2 失败-保险默认原则 192
8.1.3 完全仲裁原则 192
8.1.4 开放式设计原则 192
8.1.5 特权分离原则 192
8.1.6 最小特权原则 193
8.1.7 最少公共机制原则 193
8.1.8 心理可接受性原则 194
8.2 系统质量需求工程 194
8.3 威胁建模 195
8.4 使用/误用案例 196
8.5 架构与设计 196
8.6 现成软件 198
8.6.1 现有代码中的漏洞 198
8.6.2 安全的包装器 199
8.7 编译器检查 199
8.8 输入验证 200
8.9 数据净化 201
8.9.1 黑名单 201
8.9.2 白名单 202
8.9.3 测试 203
8.10 静态分析 203
8.10.1 Fortify 203
8.10.2 Prexis 204
8.10.3 Prevent 204
8.10.4 PREfix和PREfast 205
8.11 质量保证 205
8.11.1 渗透测试 205
8.11.2 模糊测试 206
8.11.3 代码审计 206
8.11.4 开发人员准则与检查清单 206
8.11.5 独立安全审查 207
8.12 内存权限 207
8.12.1 W^X 207
8.12.2 PaX 208
8.12.3 数据执行防护 208
8.13 深层防御 209
8.14 TSP-Secure 209
8.14.1 计划和跟踪 209
8.14.2 质量管理 210
8.15 本章小结 211
8.16 阅读材料 211
参考文献 212
缩略语 223
· · · · · · (收起)

读后感

评分

看到有友人评论这本书卖得太贵,忍不住说几句。这本书作者是CERT专门负责分析漏洞的研究人员,书里面很清晰的整理了各类软件漏洞成因,给的例子非常的合适,应该是一看就能看懂,但是又不失深度。如果把里面的基本内容都烂熟于心,基本上可以去开始CTF或者初级漏洞挖掘了。 再...

评分

看到有友人评论这本书卖得太贵,忍不住说几句。这本书作者是CERT专门负责分析漏洞的研究人员,书里面很清晰的整理了各类软件漏洞成因,给的例子非常的合适,应该是一看就能看懂,但是又不失深度。如果把里面的基本内容都烂熟于心,基本上可以去开始CTF或者初级漏洞挖掘了。 再...

评分

看到有友人评论这本书卖得太贵,忍不住说几句。这本书作者是CERT专门负责分析漏洞的研究人员,书里面很清晰的整理了各类软件漏洞成因,给的例子非常的合适,应该是一看就能看懂,但是又不失深度。如果把里面的基本内容都烂熟于心,基本上可以去开始CTF或者初级漏洞挖掘了。 再...

评分

书很好,翻译很垃圾,垃圾到我特意来评论。举例:在软件安全领域,一个值称作被污染的,如果他的来源是不受信任的(程序的控制之外),并且没有背景画,以确保它符合该值的使用者要求的任何约束,例如,所有的字符串都要求是空字符结尾的约束。一字不差,你翻译的是个屁。推荐...  

评分

书很好,翻译很垃圾,垃圾到我特意来评论。举例:在软件安全领域,一个值称作被污染的,如果他的来源是不受信任的(程序的控制之外),并且没有背景画,以确保它符合该值的使用者要求的任何约束,例如,所有的字符串都要求是空字符结尾的约束。一字不差,你翻译的是个屁。推荐...  

用户评价

评分

这本书的封面设计非常简洁有力,黑白灰的配色给人一种专业和严谨的感觉,光是摆在书架上就显得很有分量。我本来对C和C++这种老牌语言的安全问题不太敏感,总觉得那是上个时代的事情,但翻开目录后才发现,里面涉及的陷阱比我想象的要深奥得多。它没有泛泛而谈地讲些大道理,而是直接深入到内存管理、指针操作这些最底层的细节中去,比如栈溢出、堆缓冲区溢出这些经典的安全漏洞,作者居然能用非常生动的例子把它剖析得清清楚楚,甚至配上了汇编层面的解读,这对于那些自认为对C/C++了如指掌的开发者来说,绝对是一剂猛药。我尤其欣赏它对于现代编译器的安全特性,比如ASLR和DEP的介绍,这部分内容让我意识到,仅仅依赖操作系统层面的保护是远远不够的,代码层面的安全加固才是根本。这本书的结构安排得很巧妙,前半部分打地基,后半部分才是具体的实战演练,感觉像是跟随一位经验丰富的老兵走了一趟战场,学到的都是真本事,而不是纸上谈兵的理论。

评分

这本书的案例选择极其贴合工业界的实际痛点。它没有回避那些在大型项目中经常遇到的安全死角,比如权限提升和不安全的IPC(进程间通信)机制。在讲解如何安全地处理用户输入和系统调用时,作者引入了沙箱机制的概念,并探讨了如何在C++代码中有效地封装和限制外部接口的权限,以降低攻击面。我特别欣赏作者在探讨编译优化选项对安全性的影响时所展现的严谨态度——有些优化虽然能提升性能,但可能会意外地破坏原有的安全边界。总的来说,这本书与其说是一本编程指南,不如说是一部C/C++安全实践的“反面教材集锦”与“正向防御手册”的完美结合体。读完之后,我感觉自己对代码的“敬畏心”又提升了一个档次,编写每一行代码都会下意识地去检查是否存在潜在的、潜藏的风险点。

评分

这本书的排版和插图设计,说实话,不是那种花哨的现代风格,但却极其务实。每一张流程图、每一个代码块的对齐都体现了匠心。我特别关注了关于输入验证和数据解析那几章,这部分内容与网络服务和文件处理的安全息息相关。作者深入探讨了格式化字符串漏洞(Format String Vulnerability),这东西在现代应用中可能不那么常见,但一旦出现,危害性极大。更重要的是,它扩展到了对外部库函数调用的不安全使用,比如`strcpy`、`sprintf`这些“臭名昭著”的函数,并详细对比了使用更安全的替代方案,如`strncpy`或C++标准库中的`std::string`的优势和陷阱。我发现自己过去写的一些代码,在面对恶意构造的超长输入串时,完全没有抵抗力。这本书的讲解方式非常具有说服力,它不是简单地告诉你“不要用A”,而是告诉你“为什么不用A”,以及“用B时你需要注意哪些C点”,这种由内而外的安全教育,非常深刻。

评分

我是在一个紧急项目的压力下开始阅读这本巨著的,说实话,一开始有点被它的深度吓退了。它不是那种快速翻阅就能掌握的速成手册,更像是一本需要反复研读、时不时停下来在IDE里敲代码验证的工具书。作者在讨论到并发安全和多线程编程中的竞态条件(Race Condition)时,简直是把C++的复杂性提升到了新的维度。线程同步机制的滥用和锁粒度设计不当,这些都是日常开发中很容易被忽视的死角,但一旦出现,那就是灾难性的数据损坏。书中通过好几个复杂的并发模型例子,展示了如何通过原子操作和更细致的内存屏障来保证数据一致性,这一点对我来说收获巨大。特别是对于模板元编程和宏的滥用所带来的隐蔽性错误,作者的分析细致入微,甚至让我开始反思过去项目中那些“巧妙”但晦涩难懂的代码片段。这本书的价值就在于,它迫使你正视C++语言设计哲学中固有的危险性,并提供了一套系统的防御体系。

评分

作为一名资深的系统级软件工程师,我更看重的是这本书在处理资源泄露和异常安全方面的深度。在C++中,RAII(Resource Acquisition Is Initialization)原则是保障资源安全的关键,但如何在复杂的继承体系和多态调用中,确保析构函数能够正确无误地执行,从而避免内存泄漏或句柄悬挂,这本书给出了非常详尽的分析。它不仅提到了智能指针的正确使用,更深入讨论了自定义资源管理类(Custom Deleter)的设计模式,以及在跨模块或跨进程边界时,如何确保资源生命周期的同步。其中关于“异常安全保证”的章节,我反复阅读了好几遍,特别是对于“强异常安全保证”的实现,涉及到了大量的移动语义和临时对象的构造时机控制,这已经超出了普通应用层面的知识范畴,直指C++底层机制的核心。这本书无疑是为那些需要构建高可靠性、高稳定性的基础设施软件的工程师量身定做的。

评分

安全非常复杂,运用的想象力也非常惊人,这样一本薄薄的小册子试图面面俱到的覆盖,很多地方没有说清楚。不过用来了解常见的安全漏洞,还是上佳之选。

评分

安全非常复杂,运用的想象力也非常惊人,这样一本薄薄的小册子试图面面俱到的覆盖,很多地方没有说清楚。不过用来了解常见的安全漏洞,还是上佳之选。

评分

安全非常复杂,运用的想象力也非常惊人,这样一本薄薄的小册子试图面面俱到的覆盖,很多地方没有说清楚。不过用来了解常见的安全漏洞,还是上佳之选。

评分

写的很好,但基本上读不懂,有点难

评分

安全非常复杂,运用的想象力也非常惊人,这样一本薄薄的小册子试图面面俱到的覆盖,很多地方没有说清楚。不过用来了解常见的安全漏洞,还是上佳之选。

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2026 onlinetoolsland.com All Rights Reserved. 本本书屋 版权所有