图书介绍

C和C++安全编码 原书第2版2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载

C和C++安全编码 原书第2版
  • (美)塞克德著 著
  • 出版社: 北京:机械工业出版社
  • ISBN:9787111442790
  • 出版时间:2014
  • 标注页数:377页
  • 文件大小:74MB
  • 文件页数:398页
  • 主题词:C语言-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

C和C++安全编码 原书第2版PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 夹缝求生1

1.1 衡量危险4

1.1.1 损失的现状4

1.1.2 威胁的来源6

1.1.3 软件安全7

1.2 安全概念8

1.2.1 安全策略9

1.2.2 安全缺陷10

1.2.3 漏洞10

1.2.4 漏洞利用11

1.2.5 缓解措施12

1.3 C和C++12

1.3.1 C和C++简史13

1.3.2 C存在的问题14

1.3.3 遗留代码17

1.3.4 其他语言17

1.4 开发平台17

1.4.1 操作系统18

1.4.2 编译器18

1.5 小结18

1.6 阅读材料19

第2章 字符串20

2.1 字符串20

2.1.1 字符串数据类型20

2.1.2 UTF-822

2.1.3 宽字符串23

2.1.4 字符串字面值23

2.1.5 C++中的字符串25

2.1.6 字符类型26

2.1.7 计算字符串大小27

2.2 常见的字符串操作错误29

2.2.1 无界字符串复制29

2.2.2 差一错误32

2.2.3 空字符结尾错误33

2.2.4 字符串截断34

2.2.5 与函数无关的字符串错误34

2.3 字符串漏洞及其利用35

2.3.1 被污染的数据35

2.3.2 IsPasswordOK()的安全缺陷36

2.3.3 缓冲区溢出37

2.3.4 进程内存组织37

2.3.5 栈管理38

2.3.6 栈溢出40

2.3.7 代码注入44

2.3.8 弧注入47

2.3.9 返回导向编程48

2.4 字符串漏洞缓解策略49

2.4.1 字符串处理49

2.4.2 C11附录K边界检查接口50

2.4.3 动态分配函数52

2.4.4 C++std::basic_string54

2.4.5 使字符串对象的引用失效55

2.4.6 使用basic_string的其他常见错误57

2.5 字符串处理函数57

2.5.1 gets()57

2.5.2 C9957

2.5.3 C11附录K边界检查接口:gets_s()59

2.5.4 动态分配函数60

2.5.5 strcpy()和strcat()61

2.5.6 C9961

2.5.7 strncpy()和strncat()64

2.5.8 memcpy()和memmove()68

2.5.9 strlen()68

2.6 运行时保护策略69

2.6.1 检测和恢复69

2.6.2 输入验证70

2.6.3 对象大小检查70

2.6.4 Visual Studio中编译器生成的运行时检查73

2.6.5 栈探测仪74

2.6.6 栈溢出保护器75

2.6.7 操作系统策略76

2.6.8 检测和恢复76

2.6.9 不可执行栈77

2.6.10 W^X77

2.6.11 PaX79

2.6.12 未来发展方向79

2.7 著名的漏洞80

2.7.1 远程登录80

2.7.2 Kerberos81

2.8 小结81

2.9 阅读材料82

第3章 指针诡计83

3.1 数据位置83

3.2 函数指针84

3.3 对象指针85

3.4 修改指令指针86

3.5 全局偏移表87

3.6 .dtors区89

3.7 虚指针90

3.8 atexit()和on_exit()函数91

3.9 lngjmp()函数93

3.10 异常处理94

3.10.1 结构化异常处理94

3.10.2 系统默认异常处理96

3.11 缓解策略96

3.11.1 栈探测仪96

3.11.2 W^X97

3.11.3 对函数指针编码和解码97

3.12 小结98

3.13 阅读材料98

第4章 动态内存管理99

4.1 C内存管理100

4.1.1 C标准内存管理函数100

4.1.2 对齐101

4.1.3 alloca()和变长数组102

4.2 常见的C内存管理错误103

4.2.1 初始化错误103

4.2.2 未检查返回值104

4.2.3 Null或无效指针解引用106

4.2.4 引用已释放内存106

4.2.5 多次释放内存107

4.2.6 内存泄漏108

4.2.7 零长度分配108

4.2.8 DR≠400110

4.3 C++的动态内存管理110

4.3.1 分配函数111

4.3.2 释放函数115

4.3.3 垃圾回收115

4.4 常见的C++内存管理错误117

4.4.1 未能正确检查分配失败117

4.4.2 不正确配对的内存管理函数118

4.4.3 多次释放内存120

4.4.4 释放函数抛出一个异常123

4.5 内存管理器123

4.6 Doug Lea的内存分配器124

4.7 双重释放漏洞131

4.7.1 写入已释放的内存134

4.7.2 RtlHeap135

4.7.3 缓冲区溢出(终极版)140

4.8 缓解策略146

4.8.1 空指针146

4.8.2 一致的内存管理约定146

4.8.3 phkmalloc147

4.8.4 随机化148

4.8.5 OpenBSD148

4.8.6 jemalloc内存管理器149

4.8.7 静态分析149

4.8.8 运行时分析工具150

4.9 值得注意的漏洞153

4.9.1 CVS缓冲区溢出漏洞153

4.9.2 Microsoft数据访问组件153

4.9.3 CVS服务器双重释放漏洞154

4.9.4 MIT Kerberos 5中的漏洞154

4.10 小结154

第5章 整数安全155

5.1 整数安全导论155

5.2 整数数据类型156

5.2.1 无符号整数类型156

5.2.2 回绕157

5.2.3 有符号整数类型159

5.2.4 有符号整数的取值范围162

5.2.5 整数溢出163

5.2.6 字符类型165

5.2.7 数据模型165

5.2.8 其他整数类型166

5.3 整数转换169

5.3.1 转换整数169

5.3.2 整数转换级别169

5.3.3 整数类型提升170

5.3.4 普通算术转换171

5.3.5 由无符号整数类型转换171

5.3.6 由有符号整数类型转换173

5.3.7 转换的影响176

5.4 整数操作176

5.4.1 赋值177

5.4.2 加法179

5.4.3 减法183

5.4.4 乘法185

5.4.5 除法和求余188

5.4.6 移位192

5.5 整数漏洞194

5.5.1 漏洞194

5.5.2 回绕194

5.5.3 转换和截断错误196

5.5.4 非异常的整数逻辑错误197

5.6 缓解策略198

5.6.1 整数类型的选择198

5.6.2 抽象数据类型200

5.6.3 任意精度算术200

5.6.4 范围检查201

5.6.5 前提条件和后验条件测试203

5.6.6 安全整数库204

5.6.7 溢出检测205

5.6.8 编译器生成的运行时检查206

5.6.9 可验证范围操作207

5.6.10 仿佛无限范围整数模型208

5.6.11 测试与分析208

5.7 小结210

第6章 格式化输出211

6.1 变参函数212

6.2 格式化输出函数214

6.2.1 格式字符串215

6.2.2 GCC216

6.2.3 Visual C++217

6.3 对格式化输出函数的漏洞利用217

6.3.1 缓冲区溢出218

6.3.2 输出流219

6.3.3 使程序崩溃219

6.3.4 查看栈内容219

6.3.5 查看内存内容221

6.3.6 覆写内存222

6.3.7 国际化226

6.3.8 宽字符格式字符串漏洞226

6.4 栈随机化226

6.4.1 阻碍栈随机化227

6.4.2 以双字的格式写地址227

6.4.3 直接参数访问228

6.5 缓解策略230

6.5.1 排除用户输入的格式字符串230

6.5.2 静态内容的动态使用230

6.5.3 限制字节写入231

6.5.4 C11附录K边界检查接口232

6.5.5 iostream与stdio233

6.5.6 测试234

6.5.7 编译器检查234

6.5.8 静态污点分析234

6.5.9 调整变参函数的实现235

6.5.10 Exec Shield236

6.5.11 FormatGuard236

6.5.12 静态二进制分析237

6.6 著名的漏洞238

6.6.1 华盛顿大学FTP Daemon238

6.6.2 CDE ToolTalk238

6.6.3 Ettercap NG-0.7.2版238

6.7 小结239

6.8 阅读材料240

第7章 并发241

7.1 多线程241

7.2 并行242

7.2.1 数据并行243

7.2.2 任务并行245

7.3 性能目标245

7.4 常见错误247

7.4.1 竞争条件247

7.4.2 损坏的值248

7.4.3 易变的对象249

7.5 缓解策略250

7.5.1 内存模型251

7.5.2 同步原语253

7.5.3 线程角色分析(研究)259

7.5.4 不可变的数据结构260

7.5.5 并发代码属性261

7.6 缓解陷阱261

7.6.1 死锁262

7.6.2 过早释放锁266

7.6.3 争用267

7.6.4 ABA问题268

7.7 值得注意的漏洞272

7.7.1 在多核动态随机访问存储器系统中的DoS攻击272

7.7.2 系统调用包装器中的并发漏洞272

7.8 小结273

第8章 文件I/O275

8.1 文件I/O基础275

8.1.1 文件系统275

8.1.2 特殊文件277

8.2 文件I/O接口278

8.2.1 数据流278

8.2.2 打开和关闭文件279

8.2.3 POSIX280

8.2.4 C++中的文件I/O281

8.3 访问控制282

8.3.1 UNIX文件权限282

8.3.2 进程特权284

8.3.3 更改特权285

8.3.4 管理特权288

8.3.5 管理权限292

8.4 文件鉴定295

8.4.1 目录遍历295

8.4.2 等价错误297

8.4.3 符号链接298

8.4.4 规范化300

8.4.5 硬链接302

8.4.6 设备文件304

8.4.7 文件属性306

8.5 竞争条件308

8.5.1 检查时间和使用时间308

8.5.2 创建而不替换309

8.5.3 独占访问312

8.5.4 共享目录313

8.6 缓解策略315

8.6.1 关闭竞争窗口315

8.6.2 消除竞争对象319

8.6.3 控制对竞争对象的访问320

8.6.4 竞争检测工具322

8.7 小结322

第9章 推荐的实践324

9.1 安全开发生命周期324

9.1.1 TSP-Secure326

9.1.2 计划和跟踪327

9.1.3 质量管理328

9.2 安全培训329

9.3 要求330

9.3.1 安全编码标准330

9.3.2 安全质量需求工程330

9.3.3 用例/误用例332

9.4 设计333

9.4.1 安全的软件开发原则334

9.4.2 威胁建模337

9.4.3 分析攻击面338

9.4.4 现有代码中的漏洞338

9.4.5 安全包装器339

9.4.6 输入验证339

9.4.7 信任边界340

9.4.8 黑名单342

9.4.9 白名单343

9.4.10 测试343

9.5 实现344

9.5.1 编译器检查344

9.5.2 仿佛无限范围整数模型345

9.5.3 有安全保证的C/C++345

9.5.4 静态分析346

9.5.5 源代码分析实验室348

9.5.6 深层防御349

9.6 验证350

9.6.1 静态分析350

9.6.2 渗透测试350

9.6.3 模糊测试351

9.6.4 代码审计352

9.6.5 开发人员准则与检查清单352

9.6.6 独立安全审查353

9.6.7 攻击面回顾353

9.7 小结354

9.8 阅读材料354

参考文献355

缩略语373

热门推荐