目录
前言 .1
第1 章 软件安全历程 .21
1.1 黑客的起源 . 21
1.2 Enigma 密码机,约1930 年 22
1.3 自动Enigma 密码破解,约1940 年 26
1.4 电话“Phreaking”,约1950 年 . 29
1.5 防Phreaking 技术,约1960 年 31
1.6 计算机黑客的起源,约1980 年 32
1.7 互联网的兴起,约2000 年 . 34
1.8 现时代的黑客,约2015 年之后 36
1.9 小结 40
第一部分 侦察
第2 章 Web 应用侦察简介 43
2.1 信息收集 43
2.2 Web 应用程序构图 46
2.3 小结 48
第3 章 现代Web 应用程序的结构 49
3.1 现代的与传统的Web 应用程序 49
3.2 REST API 52
3.3 JS 对象标记 55
3.4 JavaScript. 57
3.4.1 变量和作用域 58
3.4.2 函数 61
3.4.3 上下文 . 62
3.4.4 原型继承. 63
3.4.5 异步模型. 66
3.4.6 浏览器DOM . 69
3.5 SPA 框架 71
3.6 认证和授权系统 72
3.6.1 认证 73
3.6.2 授权 74
3.7 Web 服务器 . 74
3.8 服务器端数据库 76
3.9 客户端数据存储 77
3.10 小结 . 78
第4 章 寻找子域 79
4.1 单域多应用程序 79
4.2 浏览器内置的网络分析工具 80
4.3 公开信息利用 83
4.3.1 搜索引擎缓存 84
4.3.2 存档信息利用 86
4.3.3 社交媒体快照 88
4.4 域传送攻击 . 92
4.5 暴力破解子域 94
4.6 字典攻击 101
4.7 小结 . 103
第5 章 API 分析 105
5.1 端点探索 105
5.2 认证机制 109
5.3 端点的模型 111
5.3.1 常见模型 111
5.3.2 特定于应用的模型 112
5.4 小结 . 114
第6 章 识别第三方依赖 . 115
6.1 探测客户端框架 115
6.1.1 探测SPA 框架 116
6.1.2 探测JavaScript 库 118
6.1.3 探测CSS 库 120
6.2 探测服务器端框架 121
6.2.1 标头探测 121
6.2.2 默认错误信息和404 页面 122
6.2.3 探测数据库 . 125
6.3 小结 . 127
第7 章 定位应用架构中的薄弱点 128
7.1 安全架构与不安全架构的标志 129
7.2 多层安全机制 . 134
7.3 采纳和重构 135
7.4 小结 . 137
第8 章 第一部分总结 139
第二部分 攻击
第9 章 Web 应用入侵简介 143
9.1 黑客的心态 143
9.2 运用侦察 145
第10 章 XSS 攻击 147
10.1 XSS 的发现和利用 148
10.2 储存型XSS 152
10.3 反射型XSS 154
10.4 DOM 型XSS 157
10.5 突变型XSS 160
10.6 小结 162
第11 章 CSRF 攻击 . 163
11.1 查询参数篡改 164
11.2 替换GET 的有效载荷 169
11.3 针对POST 端点的CSRF 170
11.4 小结 172
第12 章 XXE 攻击 173
12.1 直接型XXE 174
12.2 间接型XXE 177
12.3 小结 179
第13 章 注入攻击 . 181
13.1 SQL 注入攻击 181
13.2 代码注入 . 186
13.3 命令注入 . 191
13.4 小结 195
第14 章 DoS 攻击 196
14.1 ReDoS(Regex DoS)攻击 197
14.2 逻辑DoS 攻击 . 200
14.3 DDoS(分布式DoS)攻击 204
14.4 小结 205
第15 章 第三方依赖漏洞利用 206
15.1 集成的方法 208
15.1.1 分支和复制 209
15.1.2 自托管的应用程序集成 . 210
15.1.3 源代码集成 211
15.2 软件包管理器 212
15.2.1 JavaScript 包管理器 . 212
15.2 2 Java 包管理器 . 214
15.2.3 其他语言的包管理器 215
15.3 CVE(公共漏洞和披露)数据库 216
15.4 小结 217
第16 章 第二部分总结 219
第三部分 防御
第17 章 现代Web 应用加固 223
17.1 防御性软件架构 224
17.2 全面的代码审查 225
17.3 漏洞发现 . 225
17.4 漏洞分析 . 226
17.5 漏洞管理 . 227
17.6 回归测试 . 228
17.7 缓解策略 . 228
17.8 应用侦察和攻击技术 229
第18 章 安全的应用架构 230
18.1 分析功能需求 231
18.2 认证和授权 232
18.2.1 SSL 和TLS 232
18.2.2 安全的凭证 234
18.2.3 散列凭证信息 . 235
18.2.4 2FA 认证 238
18.3 PII 和财务数据 239
18.4 搜索 240
18.5 小结 240
第19 章 代码安全审查 243
19.1 如何开始代码审查 . 244
19.2 原型漏洞与自定义逻辑漏洞 . 245
19.3 代码安全审查起步 . 247
19.4 安全编码的反面模式 249
19.4.1 黑名单 250
19.4.2 模板代码 251
19.4.3 默认信任反模式 252
19.4.4 客户端/ 服务器分离 252
19.5 小结 253
第20 章 漏洞发现 . 255
20.1 安全自动化 255
20.1.1 静态分析 256
20.1.2 动态分析 258
20.1.3 漏洞回归测试 . 259
20.2 责任披露计划 262
20.3 漏洞赏金计划 263
20.4 第三方渗透测试 264
20.5 小结 265
第21 章 漏洞管理 . 266
21.1 漏洞重现 . 266
21.2 漏洞严重等级 267
21.3 通用漏洞评分系统 . 268
21.3.1 CVSS:基础评分 . 269
21.3.2 CVSS:时间评分 . 271
21.3.3 CVSS:环境评分 . 272
21.4 高级漏洞评分 273
21.5 分拣、评分之后 274
21.6 小结 275
第22 章 防御XSS 攻击 . 276
22.1 防御XSS 编码最佳实践 . 276
22.2 净化用户输入 279
22.2.1 DOM 解析接收器 . 280
22.2.2 SVG 接收器 . 281
22.2.3 Blob 接收器 . 281
22.2.4 超链接净化 282
22.2.5 HTML 实体编码 283
22.3 CSS 284
22.4 阻止XSS 的CSP 285
22.4.1 脚本源 285
22.4.2 Unsafe Eval 和Unsafe Inline 选项 287
22.4.3 实现CSP 288
22.5 小结 288
第23 章 防御CSRF 攻击 290
23.1 标头验证 . 290
23.2 CSRF 令牌 . 292
23.3 防CRSF 编码最佳实践 294
23.3.1 无状态GET 请求 294
23.3.2 应用级CSRF 缓解 296
23.4 小结 297
第24 章 防御XXE 攻击 . 299
24.1 评估其他数据格式 . 300
24.2 高级XXE 风险 301
24.3 小结 302
第25 章 防御注入攻击 303
25.1 缓解SQL 注入攻击 303
25.1.1 SQL 注入检测 . 304
25.1.2 预编译语句 306
25.1.3 特定于数据库的防御 308
25.2 通用注入防御 308
25.2.1 潜在的注入目标 309
25.2.2 最小权限原则 . 310
25.2.3 命令白名单化 . 311
25.3 小结 312
第26 章 防御DoS 攻击 . 314
26.1 防范Regex DoS 攻击 315
26.2 防范逻辑DoS 攻击 315
26.3 防范DDoS 攻击 . 316
26.4 缓解DDoS 攻击 . 317
26.5 小结 318
第27 章 加固第三方依赖 320
27.1 评估依赖关系树 320
27.1.1 依赖关系树建模 321
27.1.2 依赖关系树实例 322
27.1.3 自动评估 322
27.2 安全集成技术 323
27.2.1 关注点分离 323
27.2.2 安全包管理 324
27.3 小结 325
第28 章 第三部分小结 327
28.1 软件安全的历史 327
28.2 Web 应用侦察 329
28.3 攻击 331
28.4 防御 332
第29 章 总结 . 336
作者介绍 339
封面介绍 339