×
暂无评论
图文详情
  • ISBN:9787115617736
  • 装帧:平装-胶订
  • 册数:暂无
  • 重量:暂无
  • 开本:16开
  • 页数:226
  • 出版时间:2024-01-01
  • 条形码:9787115617736 ; 978-7-115-61773-6

本书特色

1.本书是针对软件专业人士编写的技术指南,适合那些希望更好理解软件安全原则、学习如何实践软件安全设计和实施的专业人员进行阅读。

2.本书是根据作者从业经验创作的,其中包含了很多实用性很强的观点,读者可以立刻把这些关键付诸实践,让自己正在编写的软件更加安全。

3.本书涵盖了各种新兴技术和趋势,如云计算、物联网、人工智能等,通过探讨这些技术如何影响软件开发安全性,为读者提供了新的安全战略和解决方案。

4.除了技术和策略外,本书还强调了培养安全意识和建立安全文化的重要性,通过实践和案例分享,帮助读者在企业中建立可持续的安全文化和实践。

内容简介

本书共有13章,分为三大部分,即概念、设计和实施。具体内容包括:**部分(第1~5章)为全书提供了概念基础,涉及信息安全和隐私基础概述、威胁建模、对可识别威胁进行防御性缓解的通用战略、安全设计模式,以及使用标准的加密库来缓解常见的风险。第二部分(第6~7章)分别从设计者和审查员的角度讨论了如何使软件设计变得安全的指导,以及可以应用哪些技术来实现安全性。第三部分(第8~13章)涵盖了实施阶段的安全性,在有了一个安全的设计后,这一部分将会解释如何在不引入额外漏洞的情况下进行软件开发。

目录

第 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
展开全部

作者简介

[美]洛伦·科恩费尔德(Loren Kohnfelder) 从事编程行业已经超过 50 年时间,在麻省理工学院攻读硕士研究生期间发表的论文“关于一项实用的公钥加密系统(Towards a Practical Public-Key Cryptosystem)” (1978)描述了数字证书以及公共密钥体系结构(PKI) 的基础。他的软件从业经历包括各式各样的编程类工作,如编写各种打孔卡、磁盘控制器驱动、 链接加载器(linking loader)、电子游戏,以及半导体研究实验室的设备控制软件。在微软供职期间, 他回归了安全工作, 加盟了微软的 IE 浏览器团队,之后又加入了.NET 平台安全团队,参与了全行业主动安全进程方法的设计。近期他加盟了谷歌公司,曾担任安全团队的软件工程师,此后又参与组建了隐私团队,对大型商业系统进行了百次以上的安全设计审查。

预估到手价 ×

预估到手价是按参与促销活动、以最优惠的购买方案计算出的价格(不含优惠券部分),仅供参考,未必等同于实际到手价。

确定
快速
导航