商品详情
书名:软件开发*之道概念、设计与实施
定价:99.8
ISBN:9787115617736
作者:[美]洛伦·科恩费尔德(Loren Kohnfelder)
版次:第1版
出版时间:2024-01
内容提要:
本书共有13章,分为三大部分,即概念、设计和实施。具体内容包括:*部分(第1~5章)为全书提供了概念基础,涉及信息*和隐私基础概述、威胁建模、对可识别威胁进行防御性缓解的通用战略、*设计模式,以及使用标准的加密库来缓解常见的风险。*部分(第6~7章)分别从设计者和审查员的角度讨论了如何使软件设计变得*的指导,以及可以应用哪些技术来实现*性。第三部分(第8~13章)涵盖了实施阶段的*性,在有了一个*的设计后,这一部分将会解释如何在不引入额外漏洞的情况下进行软件开发。
作者简介:
[美]洛伦·科恩费尔德(Loren Kohnfelder) 从事编程行业已经*过 50 年时间,在麻省理工学院攻读硕士研究生期间发表的论文“关于一项实用的公钥加密系统(Towards a Practical Public-Key Cryptosystem)” (1978)描述了数字证书以及公共密钥体系结构(PKI) 的基础。他的软件从业经历包括各式各样的编程类工作,如编写各种打孔卡、磁盘控制器驱动、 链接加载器(linking loader)、电子游戏,以及半导体研究实验室的设备控制软件。在微软供职期间, 他回归了*工作, 加盟了微软的 IE 浏览器团队,之后又加入了.NET 平台*团队,参与了全行业主动*进程方法的设计。近期他加盟了谷歌公司,曾担任*团队的软件工程师,此后又参与组建了隐私团队,对大型商业系统进行了百次以上的*设计审查。
目录:
第 1 部分 概念
第 1 章 基础 3
1.1 理解* 3
1.2 信任 4
1.2.1 信任感 5
1.2.2 比特位不是肉眼可见的 6
1.2.3 能力与不足 6
1.2.4 信任是一个频谱 7
1.2.5 信任决策 7
1.3 *原则 9
1.3.1 信息*的 CIA 10
1.3.2 黄金标准 12
1.3.3 隐私 17
第 2 章 威胁 20
2.1 对抗性视角 21
2.2 四个问题 22
2.3 威胁建模 22
2.3.1 从一个模型入手 23
2.3.2 判断资产 24
2.3.3 判断攻击面 26
2.3.4 判断信任边界 26
2.3.5 判断威胁 28
2.3.6 缓解威胁 33
2.4 隐私方面的考量因素 34
2.5 无处不在的威胁建模 34
第 3 章 缓解 36
3.1 解决威胁 36
3.2 结构性的缓解战略 37
3.2.1 把攻击面减到*小 37
3.2.2 缩窄漏洞窗口 38
3.2.3 把暴露的数据减到*少 39
3.3 访问策略与访问控制 40
3.4 接口 41
3.5 通信 42
3.6 存储 42
第 4 章 模式 44
4.1 设计属性 45
4.1.1 极简设计 45
4.1.2 透明设计 46
4.2 暴露*少信息 47
4.2.1 *小权限 47
4.2.2 *少信息 48
4.2.3 默认防御 49
4.2.4 放行列表与阻塞列表 49
4.2.5 避免可预测性 51
4.2.6 失效* 52
4.3 强力执行 52
4.3.1 完全仲裁原则 52
4.3.2 *少共同机制 54
4.4 冗余 55
4.4.1 深度防御 55
4.4.2 权限分离 56
4.5 信任与责任 57
4.5.1 不盲目信任 58
4.5.2 接受*责任 58
4.6 反模式 60
4.6.1 代理混淆问题 60
4.6.2 意图与恶意 61
4.6.3 可信的代理 62
4.6.4 信任回流 62
4.6.5 第三方 Hook 63
4.6.6 组件不可修补 63
第 5 章 密码学 64
5.1 加密工具 64
5.2 随机数 65
5.2.1 伪随机数 65
5.2.2 加密*的伪随机数 66
5.3 消息认证代码 66
5.3.1 使用 MAC 来防止篡改 67
5.3.2 重放攻击 68
5.3.3 * MAC 通信 68
5.4 对称加密 69
5.4.1 一次性填充 69
5.4.2 *加密标准 70
5.4.3 使用对称加密 70
5.5 非对称加密 71
5.6 RSA 密码系统 71
5.7 数字签名 72
5.8 数字证书 74
5.9 密钥交换 74
5.10 使用加密 76
第 2 部分 设计
第 6 章 *的设计 81
6.1 在设计中集成*性 82
6.1.1 明确设计中的假定规则 82
6.1.2 定义范围 83
6.1.3 设置*要求 84
6.1.4 威胁建模 85
6.2 建立缓解措施 87
6.2.1 设计接口 87
6.2.2 设计数据处理 88
6.3 将隐私融入设计 88
6.4 规划整个软件生命周期 89
6.5 权衡取舍 89
6.6 设计的简洁性 90
第 7 章 *设计审查 92
7.1 SDR 流程 92
7.1.1 为什么要执行 SDR? 92
7.1.2 什么时候执行 SDR? 93
7.1.3 文档是*不可少的 93
7.2 SDR 流程 93
7.2.1 研究 94
7.2.2 询问 94
7.3.3 识别 95
7.3.4 合作 95
7.3.5 撰写 96
7.3.6 跟进 97
7.3 评估设计*性 97
7.3.1 以四个问题为指导 97
7.3.2 我们在做什么? 98
7.3.3 会出什么问题? 98
7.3.4 我们要怎么做? 99
7.3.5 我们做的好吗? 99
7.3.6 在哪里挖掘 100
7.3.7 隐私审查 100
7.3.8 审查更新 100
7.4 处理分歧 101
7.4.1 巧妙地沟通 101
7.4.2 案例研究:困难的审查 102
7.4.3 上报分歧 103
7.5 练习 104
第 3 部分 实施
第 8 章 *地编程 107
8.1 挑战 108
8.1.1 恶意影响 108
8.1.2 漏洞是 bug 109
8.1.3 漏洞链 110
8.1.4 Bug 和熵 112
8.1.5 警觉 112
8.2 研究: GotoFail 113
8.2.1 单行漏洞 113
8.2.2 当心 Footgun 114
8.2.3 GotoFail 的教训 115
8.3 编码漏洞 116
8.3.1 原子性 116
8.3.2 时序攻击 117
8.3.3 序列化 118
8.4 非常嫌疑犯 118
第 9 章 低级编码缺陷 120
9.1 算数漏洞 121
9.1.1 定宽整数漏洞 121
9.1.2 浮点精度漏洞 123
9.1.3 示例:浮点下溢 124
9.1.4 示例:整数溢出 126
9.1.5 *算数 128
9.2 内存访问漏洞 129
9.2.1 内存管理 129
9.2.2 缓冲区溢出 130
9.2.3 示例:内存分配漏洞 130
9.2.4 案例研究: Heartbleed
漏洞 133
第 10 章 不受信任的输入 138
10.1 输入验证 138
10.1.1 确定有效性 140
10.1.2 验证标准 140
10.1.3 拒绝无效输入 141
10.1.4 纠正无效输入 142
10.2 字符串漏洞 142
10.2.1 长度问题 143
10.2.2 Unicode 问题 143
10.2.3 编码和字形 143
10.2.4 大小写转换 144
10.3 注入攻击漏洞 144
10.3.1 SQL 注入攻击 145
10.3.2 路径遍历 147
10.3.3 正则表达式 149
10.3.4 XML 的危险 149
10.4 缓解注入攻击 150
第 11 章 WEB * 152
11.1 建立在框架之上 153
11.2 Web *模型 153
11.2.1 HTTP 协议 154
11.2.2 数字证书和 HTTPS 156
11.2.3 同源策略 158
11.2.4 Web Cookies 159
11.3 常见的 Web 漏洞 160
11.3.1 跨站脚本攻击 161
11.3.2 跨站请求伪造攻击 163
11.4 更多的漏洞和缓解措施 165
第 12 章 *测试 167
12.1 什么是*测试? 167
12.1.1 整数溢出 167
12.1.2 内存管理问题 167
12.1.3 不可靠输入 168
12.1.4 网页* 168
12.1.5 异常处理缺陷 168
12.2 对 GotoFail 漏洞执行*测试 168
12.2.1 功能测试 170
12.2.2 包含漏洞的功能测试 170
12.2.3 *测试用例 170
12.2.4 *测试的限制 171
12.3 编写*测试用例 171
12.3.1 测试输入验证 172
12.3.2 测试 XSS 漏洞 173
12.4 模糊测试 174
12.5 *回归测试 175
12.6 可用性测试 177
12.6.1 资源消耗 177
12.6.2 阈值测试 178
12.6.3 分布式拒绝服务攻击 179
12.7 *测试的*实践 179
12.7.1 测试驱动的开发( Test-
driven development) 179
12.7.2 利用集成测试 179
12.7.3 追赶*测试的进度 180
第 13 章 *部署*实践 181
13.1 代码质量 181
13.1.1 代码清洁 181
13.1.2 异常和错误处理 182
13.1.3 记录*性 183
13.1.4 *代码审查 183
13.2 依赖关系 184
13.2.1 选择*的组件 184
13.2.2 保护接口 185
13.2.3 不要做重复的工作 186
13.2.4 对抗传统* 186
13.3 漏洞分类 187
13.3.1 DREAD 评估 187
13.3.2 创建利用漏洞的有效
攻击 189
13.3.3 作出分类决策 190
13.4 维护一个*的开发环境 190
13.4.1 开发和生产相分离 190
13.4.2 保护开发工具 191
13.4.3 发布产品 191
后记 193
附录 A 设计文档示例 203
附录 B 词汇表 215
附录 C 练习 227
附录 D 备忘单 231
定价:99.8
ISBN:9787115617736
作者:[美]洛伦·科恩费尔德(Loren Kohnfelder)
版次:第1版
出版时间:2024-01
内容提要:
本书共有13章,分为三大部分,即概念、设计和实施。具体内容包括:*部分(第1~5章)为全书提供了概念基础,涉及信息*和隐私基础概述、威胁建模、对可识别威胁进行防御性缓解的通用战略、*设计模式,以及使用标准的加密库来缓解常见的风险。*部分(第6~7章)分别从设计者和审查员的角度讨论了如何使软件设计变得*的指导,以及可以应用哪些技术来实现*性。第三部分(第8~13章)涵盖了实施阶段的*性,在有了一个*的设计后,这一部分将会解释如何在不引入额外漏洞的情况下进行软件开发。
作者简介:
[美]洛伦·科恩费尔德(Loren Kohnfelder) 从事编程行业已经*过 50 年时间,在麻省理工学院攻读硕士研究生期间发表的论文“关于一项实用的公钥加密系统(Towards a Practical Public-Key Cryptosystem)” (1978)描述了数字证书以及公共密钥体系结构(PKI) 的基础。他的软件从业经历包括各式各样的编程类工作,如编写各种打孔卡、磁盘控制器驱动、 链接加载器(linking loader)、电子游戏,以及半导体研究实验室的设备控制软件。在微软供职期间, 他回归了*工作, 加盟了微软的 IE 浏览器团队,之后又加入了.NET 平台*团队,参与了全行业主动*进程方法的设计。近期他加盟了谷歌公司,曾担任*团队的软件工程师,此后又参与组建了隐私团队,对大型商业系统进行了百次以上的*设计审查。
目录:
第 1 部分 概念
第 1 章 基础 3
1.1 理解* 3
1.2 信任 4
1.2.1 信任感 5
1.2.2 比特位不是肉眼可见的 6
1.2.3 能力与不足 6
1.2.4 信任是一个频谱 7
1.2.5 信任决策 7
1.3 *原则 9
1.3.1 信息*的 CIA 10
1.3.2 黄金标准 12
1.3.3 隐私 17
第 2 章 威胁 20
2.1 对抗性视角 21
2.2 四个问题 22
2.3 威胁建模 22
2.3.1 从一个模型入手 23
2.3.2 判断资产 24
2.3.3 判断攻击面 26
2.3.4 判断信任边界 26
2.3.5 判断威胁 28
2.3.6 缓解威胁 33
2.4 隐私方面的考量因素 34
2.5 无处不在的威胁建模 34
第 3 章 缓解 36
3.1 解决威胁 36
3.2 结构性的缓解战略 37
3.2.1 把攻击面减到*小 37
3.2.2 缩窄漏洞窗口 38
3.2.3 把暴露的数据减到*少 39
3.3 访问策略与访问控制 40
3.4 接口 41
3.5 通信 42
3.6 存储 42
第 4 章 模式 44
4.1 设计属性 45
4.1.1 极简设计 45
4.1.2 透明设计 46
4.2 暴露*少信息 47
4.2.1 *小权限 47
4.2.2 *少信息 48
4.2.3 默认防御 49
4.2.4 放行列表与阻塞列表 49
4.2.5 避免可预测性 51
4.2.6 失效* 52
4.3 强力执行 52
4.3.1 完全仲裁原则 52
4.3.2 *少共同机制 54
4.4 冗余 55
4.4.1 深度防御 55
4.4.2 权限分离 56
4.5 信任与责任 57
4.5.1 不盲目信任 58
4.5.2 接受*责任 58
4.6 反模式 60
4.6.1 代理混淆问题 60
4.6.2 意图与恶意 61
4.6.3 可信的代理 62
4.6.4 信任回流 62
4.6.5 第三方 Hook 63
4.6.6 组件不可修补 63
第 5 章 密码学 64
5.1 加密工具 64
5.2 随机数 65
5.2.1 伪随机数 65
5.2.2 加密*的伪随机数 66
5.3 消息认证代码 66
5.3.1 使用 MAC 来防止篡改 67
5.3.2 重放攻击 68
5.3.3 * MAC 通信 68
5.4 对称加密 69
5.4.1 一次性填充 69
5.4.2 *加密标准 70
5.4.3 使用对称加密 70
5.5 非对称加密 71
5.6 RSA 密码系统 71
5.7 数字签名 72
5.8 数字证书 74
5.9 密钥交换 74
5.10 使用加密 76
第 2 部分 设计
第 6 章 *的设计 81
6.1 在设计中集成*性 82
6.1.1 明确设计中的假定规则 82
6.1.2 定义范围 83
6.1.3 设置*要求 84
6.1.4 威胁建模 85
6.2 建立缓解措施 87
6.2.1 设计接口 87
6.2.2 设计数据处理 88
6.3 将隐私融入设计 88
6.4 规划整个软件生命周期 89
6.5 权衡取舍 89
6.6 设计的简洁性 90
第 7 章 *设计审查 92
7.1 SDR 流程 92
7.1.1 为什么要执行 SDR? 92
7.1.2 什么时候执行 SDR? 93
7.1.3 文档是*不可少的 93
7.2 SDR 流程 93
7.2.1 研究 94
7.2.2 询问 94
7.3.3 识别 95
7.3.4 合作 95
7.3.5 撰写 96
7.3.6 跟进 97
7.3 评估设计*性 97
7.3.1 以四个问题为指导 97
7.3.2 我们在做什么? 98
7.3.3 会出什么问题? 98
7.3.4 我们要怎么做? 99
7.3.5 我们做的好吗? 99
7.3.6 在哪里挖掘 100
7.3.7 隐私审查 100
7.3.8 审查更新 100
7.4 处理分歧 101
7.4.1 巧妙地沟通 101
7.4.2 案例研究:困难的审查 102
7.4.3 上报分歧 103
7.5 练习 104
第 3 部分 实施
第 8 章 *地编程 107
8.1 挑战 108
8.1.1 恶意影响 108
8.1.2 漏洞是 bug 109
8.1.3 漏洞链 110
8.1.4 Bug 和熵 112
8.1.5 警觉 112
8.2 研究: GotoFail 113
8.2.1 单行漏洞 113
8.2.2 当心 Footgun 114
8.2.3 GotoFail 的教训 115
8.3 编码漏洞 116
8.3.1 原子性 116
8.3.2 时序攻击 117
8.3.3 序列化 118
8.4 非常嫌疑犯 118
第 9 章 低级编码缺陷 120
9.1 算数漏洞 121
9.1.1 定宽整数漏洞 121
9.1.2 浮点精度漏洞 123
9.1.3 示例:浮点下溢 124
9.1.4 示例:整数溢出 126
9.1.5 *算数 128
9.2 内存访问漏洞 129
9.2.1 内存管理 129
9.2.2 缓冲区溢出 130
9.2.3 示例:内存分配漏洞 130
9.2.4 案例研究: Heartbleed
漏洞 133
第 10 章 不受信任的输入 138
10.1 输入验证 138
10.1.1 确定有效性 140
10.1.2 验证标准 140
10.1.3 拒绝无效输入 141
10.1.4 纠正无效输入 142
10.2 字符串漏洞 142
10.2.1 长度问题 143
10.2.2 Unicode 问题 143
10.2.3 编码和字形 143
10.2.4 大小写转换 144
10.3 注入攻击漏洞 144
10.3.1 SQL 注入攻击 145
10.3.2 路径遍历 147
10.3.3 正则表达式 149
10.3.4 XML 的危险 149
10.4 缓解注入攻击 150
第 11 章 WEB * 152
11.1 建立在框架之上 153
11.2 Web *模型 153
11.2.1 HTTP 协议 154
11.2.2 数字证书和 HTTPS 156
11.2.3 同源策略 158
11.2.4 Web Cookies 159
11.3 常见的 Web 漏洞 160
11.3.1 跨站脚本攻击 161
11.3.2 跨站请求伪造攻击 163
11.4 更多的漏洞和缓解措施 165
第 12 章 *测试 167
12.1 什么是*测试? 167
12.1.1 整数溢出 167
12.1.2 内存管理问题 167
12.1.3 不可靠输入 168
12.1.4 网页* 168
12.1.5 异常处理缺陷 168
12.2 对 GotoFail 漏洞执行*测试 168
12.2.1 功能测试 170
12.2.2 包含漏洞的功能测试 170
12.2.3 *测试用例 170
12.2.4 *测试的限制 171
12.3 编写*测试用例 171
12.3.1 测试输入验证 172
12.3.2 测试 XSS 漏洞 173
12.4 模糊测试 174
12.5 *回归测试 175
12.6 可用性测试 177
12.6.1 资源消耗 177
12.6.2 阈值测试 178
12.6.3 分布式拒绝服务攻击 179
12.7 *测试的*实践 179
12.7.1 测试驱动的开发( Test-
driven development) 179
12.7.2 利用集成测试 179
12.7.3 追赶*测试的进度 180
第 13 章 *部署*实践 181
13.1 代码质量 181
13.1.1 代码清洁 181
13.1.2 异常和错误处理 182
13.1.3 记录*性 183
13.1.4 *代码审查 183
13.2 依赖关系 184
13.2.1 选择*的组件 184
13.2.2 保护接口 185
13.2.3 不要做重复的工作 186
13.2.4 对抗传统* 186
13.3 漏洞分类 187
13.3.1 DREAD 评估 187
13.3.2 创建利用漏洞的有效
攻击 189
13.3.3 作出分类决策 190
13.4 维护一个*的开发环境 190
13.4.1 开发和生产相分离 190
13.4.2 保护开发工具 191
13.4.3 发布产品 191
后记 193
附录 A 设计文档示例 203
附录 B 词汇表 215
附录 C 练习 227
附录 D 备忘单 231
- 人民邮电出版社有限公司 (微信公众号认证)
- 人民邮电出版社微店,为您提供最全面,最专业的一站式购书服务
- 扫描二维码,访问我们的微信店铺
- 随时随地的购物、客服咨询、查询订单和物流...