在當(dāng)今的數(shù)字化時(shí)代,數(shù)據(jù)安全和個(gè)人隱私面臨著前所未有的挑戰(zhàn),各種攻擊技術(shù)層出不窮,Web安全依然是最主要的攻防戰(zhàn)場(chǎng)。近10年與Web相關(guān)的技術(shù)飛速發(fā)展,本書第2版更新了前沿安全技術(shù)相關(guān)的內(nèi)容,不僅從攻防原理的角度講解了Web安全的各個(gè)方面,還介紹了安全開發(fā)、安全產(chǎn)品設(shè)計(jì)、企業(yè)安全建設(shè)等方面的最佳實(shí)踐。Web開發(fā)者、安全專業(yè)人員以及對(duì)Web安全感興趣的讀者都可將本書作為參考指南。
吳翰清·畢業(yè)于西安交通大學(xué)少年班。全國(guó)青聯(lián)委員,浙江省青聯(lián)常委。清華大學(xué)創(chuàng)新領(lǐng)軍工程博士(人工智能方向,在讀)。·2005年加入阿里,創(chuàng)建了阿里巴巴、淘寶、支付寶的安全體系,也是阿里云初創(chuàng)團(tuán)隊(duì)成員,是阿里安全從無到有、從有到強(qiáng)的親歷者!2017年開始致力于城市大腦的研究與建設(shè),專注于構(gòu)建機(jī)器智能系統(tǒng)!2017年入選“MIT全球青年科技創(chuàng)新人才榜”,是中國(guó)互聯(lián)網(wǎng)安全領(lǐng)域入選TR35的第一人!2019年入選《大數(shù)據(jù)文摘》評(píng)選的“30位新生代數(shù)字經(jīng)濟(jì)人才”!2019年當(dāng)選中國(guó)青年科技工作者協(xié)會(huì)第六屆理事!す骓(xiàng)目“計(jì)算圖書館”發(fā)起人。目前正致力于人工智能的研究和創(chuàng)業(yè)。葉敏在安全領(lǐng)域從業(yè)超過15年,在網(wǎng)絡(luò)安全攻防和云安全產(chǎn)品建設(shè)方面擁有豐富的經(jīng)驗(yàn)。曾為阿里云資深安全專家,擔(dān)任阿里云安全產(chǎn)品攻防負(fù)責(zé)人,帶領(lǐng)團(tuán)隊(duì)打造了DDoS防御、WAF、安騎士、態(tài)勢(shì)感知等多個(gè)云安全產(chǎn)品,F(xiàn)為杭州億格云科技聯(lián)合創(chuàng)始人兼首席安全研究員。
1 白帽子安全觀 1
1.1 Web安全簡(jiǎn)史 1
1.1.1 黑客技術(shù)發(fā)展歷程 1
1.1.2 Web安全的興起 4
1.2 黑帽子,白帽子 5
1.3 返璞歸真,揭秘安全的本質(zhì) 6
1.4 破除迷信,沒有銀彈 9
1.5 安全三要素 10
1.6 如何實(shí)施安全評(píng)估 11
1.6.1 資產(chǎn)等級(jí)劃分 11
1.6.2 威脅建模 13
1.6.3 風(fēng)險(xiǎn)分析 14
1.6.4 設(shè)計(jì)安全方案 15
1.6.5 態(tài)勢(shì)感知 16
1.7 安全方案的設(shè)計(jì)原則 18
1.7.1 “默認(rèn)安全”原則 18
1.7.2 “縱深防御”原則 19
1.7.3 “數(shù)據(jù)與代碼分離”原則 21
1.7.4 “隨機(jī)性”原則 23
1.8 小結(jié) 24
2 HTTP協(xié)議與Web應(yīng)用 26
2.1 HTTP協(xié)議 26
2.1.1 HTTP協(xié)議簡(jiǎn)介 26
2.1.2 HTTP請(qǐng)求 26
2.1.3 HTTP響應(yīng) 31
2.1.4 HTTP/2和HTTP/3 32
2.1.5 Websocket 34
2.2 Web服務(wù)器 35
2.3 Web頁面 36
2.3.1 文檔對(duì)象模型(DOM) 36
2.3.2 JavaScript 36
2.4 小結(jié) 37
3 瀏覽器安全 38
3.1 同源策略 38
3.2 瀏覽器沙箱 39
3.3 XSS保護(hù) 42
3.4 隱私策略 43
3.5 瀏覽器擴(kuò)展 48
3.6 高速發(fā)展的瀏覽器安全 49
3.7 小結(jié) 51
4 Cookie和會(huì)話安全 53
4.1 Cookie和會(huì)話簡(jiǎn)介 53
4.2 第一方Cookie和第三方Cookie 54
4.3 Cookie屬性 55
4.3.1 Domain屬性 55
4.3.2 Path屬性 56
4.3.3 Expires屬性 57
4.3.4 HttpOnly屬性 57
4.3.5 Secure屬性 58
4.3.6 SameSite屬性 59
4.3.7 SameParty屬性 61
4.4 安全使用Cookie 62
4.4.1 正確設(shè)置屬性值 62
4.4.2 Cookie前綴 62
4.4.3 保密性和完整性 63
4.5 會(huì)話安全 64
4.5.1 會(huì)話管理 64
4.5.2 固定會(huì)話攻擊 66
4.6 小結(jié) 67
5 深入同源策略 68
5.1 同源策略詳解 68
5.2 跨域DOM互訪問 72
5.2.1 子域名應(yīng)用互訪問 72
5.2.2 通過window.name跨域 74
5.2.3 window.postMessage方案 74
5.3 跨域訪問服務(wù)端 76
5.3.1 JSONP方案 76
5.3.2 跨域資源共享 77
5.3.3 私有網(wǎng)絡(luò)訪問 80
5.3.4 Websocket跨域訪問 82
5.3.5 其他跨域訪問 82
5.4 小結(jié) 82
6 跨站腳本攻擊 84
6.1 XSS攻擊簡(jiǎn)介 84
6.2 XSS攻擊類型 86
6.2.1 反射型XSS攻擊 86
6.2.2 存儲(chǔ)型XSS攻擊 87
6.2.3 基于DOM的XSS攻擊 88
6.2.4 Self-XSS攻擊 89
6.3 XSS攻擊進(jìn)階 90
6.3.1 初探XSS Payload 90
6.3.2 強(qiáng)大的XSS Payload 91
6.4 XSS蠕蟲 94
6.5 XSS攻擊技巧 96
6.5.1 基本的變形 96
6.5.2 事件處理程序 96
6.5.3 JavaScript偽協(xié)議 97
6.5.4 編碼繞過 98
6.5.5 繞過長(zhǎng)度限制 99
6.5.6 使用<base>標(biāo)簽 101
6.5.7 window.name的妙用 102
6.6 JavaScript框架 102
6.6.1 jQuery 103
6.6.2 Vue.js 103
6.6.3 AngularJS 103
6.7 XSS攻擊的防御 104
6.7.1 HttpOnly 105
6.7.2 輸入過濾 105
6.7.3 輸出轉(zhuǎn)義 107
6.8 關(guān)于XSS Filter 122
6.9 小結(jié) 124
7 跨站請(qǐng)求偽造(CSRF) 125
7.1 CSRF簡(jiǎn)介 125
7.2 CSRF詳解 126
7.2.1 CSRF的本質(zhì) 126
7.2.2 GET和POST請(qǐng)求 127
7.2.3 CSRF蠕蟲 128
7.3 防御CSRF攻擊 130
7.3.1 驗(yàn)證碼 130
7.3.2 Referer校驗(yàn) 130
7.3.3 Cookie的SameSite屬性 131
7.4 Anti-CSRF Token 131
7.4.1 原理 131
7.4.2 使用原則 133
7.5 小結(jié) 135
8 點(diǎn)擊劫持 136
8.1 點(diǎn)擊劫持簡(jiǎn)介 136
8.2 圖片覆蓋攻擊 139
8.3 拖拽劫持與數(shù)據(jù)竊取 140
8.4 其他劫持方式 142
8.5 防御點(diǎn)擊劫持 143
8.5.1 Frame Busting 143
8.5.2 Cookie的SameSite屬性 144
8.5.3 X-Frame-Options 144
8.5.4 CSP: frame-ancestors 145
8.6 小結(jié) 145
9 移動(dòng)Web安全 146
9.1 WebView簡(jiǎn)介 146
9.2 WebView對(duì)外暴露 147
9.3 Universal XSS 148
9.4 WebView跨域訪問 148
9.5 與本地代碼交互 150
9.6 其他安全問題 151
9.7 小結(jié) 151
10 注入攻擊 152
10.1 SQL注入 152
10.1.1 Union注入 153
10.1.2 堆疊注入 153
10.1.3 報(bào)錯(cuò)注入 154
10.2 盲注 154
10.2.1 布爾型盲注 154
10.2.2 延時(shí)盲注 155
10.2.3 帶外數(shù)據(jù)注入 157
10.3 二次注入 158
10.4 SQL注入技巧 158
10.4.1 常見攻擊技巧 158
10.4.2 命令執(zhí)行 161
10.4.3 攻擊存儲(chǔ)過程 163
10.4.4 編碼問題 164
10.4.5 SQL Column Truncation 166
10.5 防御SQL注入 166
10.5.1 使用預(yù)編譯語句 167
10.5.2 使用存儲(chǔ)過程 168
10.5.3 參數(shù)校驗(yàn) 169
10.5.4 使用安全函數(shù) 169
10.6 其他注入攻擊 171
10.6.1 NoSQL注入 171
10.6.2 XML注入 172
10.6.3 代碼注入 175
10.6.4 CRLF注入 183
10.6.5 LDAP注入 184
10.7 小結(jié) 185
11 文件操作 186
11.1 上傳和下載 186
11.1.1 上傳和下載漏洞概述 186
11.1.2 路徑解析漏洞 188
11.1.3 文件上傳與下載的安全 189
11.2 對(duì)象存儲(chǔ)的安全 190
11.3 路徑穿越(Path Traversal) 192
11.4 文件包含(File Inclusion) 194
11.5 小結(jié) 196
12 服務(wù)端請(qǐng)求偽造(SSRF) 197
12.1 SSRF攻擊簡(jiǎn)介 197
12.2 SSRF漏洞成因 199
12.3 SSRF攻擊進(jìn)階 199
12.3.1 攻擊內(nèi)網(wǎng)應(yīng)用 199
12.3.2 端口掃描 200
12.3.3 攻擊非Web應(yīng)用 201
12.3.4 繞過技巧 203
12.4 SSRF防御方案 204
12.5 小結(jié) 205
13 身份認(rèn)證 206
13.1 概述 206
13.2 密碼的安全性 207
13.3 身份認(rèn)證的方式 210
13.3.1 HTTP認(rèn)證 210
13.3.2 表單登錄 213
13.3.3 客戶端證書 214
13.3.4 一次性密碼 214
13.3.5 多因素認(rèn)證 215
13.3.6 FIDO 215
13.4 暴力破解和撞庫(kù) 217
13.5 單點(diǎn)登錄 217
13.5.1 OAuth 218
13.5.2 OIDC 221
13.5.3 SAML 221
13.5.4 CAS 223
13.6 小結(jié) 224
14 訪問控制 225
14.1 概述 225
14.2 訪問控制模型 227
14.2.1 自主訪問控制 227
14.2.2 基于角色的訪問控制 228
14.2.3 基于屬性的訪問控制 229
14.3 越權(quán)訪問漏洞 230
14.3.1 垂直越權(quán)訪問 230
14.3.2 水平越權(quán)訪問 231
14.4 零信任模型 233
14.4.1 基本原則 234
14.4.2 實(shí)現(xiàn)方案 236
14.5 小結(jié) 237
15 密碼算法與隨機(jī)數(shù) 239
15.1 加密、編碼和哈希 239
15.2 安全使用加密算法 240
15.2.1 流加密算法 240
15.2.2 分組加密算法 242
15.2.3 非對(duì)稱加密算法 245
15.3 分組填充和Padding Oracle攻擊 246
15.4 安全使用哈希函數(shù) 255
15.5 關(guān)于彩虹表 257
15.6 安全使用隨機(jī)數(shù) 259
15.6.1 偽隨機(jī)數(shù)生成器 260
15.6.2 弱偽隨機(jī)數(shù) 261
15.6.3 關(guān)于隨機(jī)數(shù)使用的建議 262
15.7 密鑰管理 263
15.8 信息隱藏 265
15.9 HTTPS協(xié)議 267
15.9.1 SSL和TLS協(xié)議的發(fā)展 268
15.9.2 HTTP嚴(yán)格傳輸安全(HSTS) 274
15.9.3 公鑰固定 276
15.9.4 證書透明度(Certificate Transparency) 277
15.10 小結(jié) 277
16 API安全 279
16.1 API安全概述 279
16.2 常見API架構(gòu) 280
16.2.1 SOAP 280
16.2.2 REST 280
16.2.3 GraphQL 282
16.3 OpenAPI規(guī)范 284
16.4 常見的API漏洞 285
16.5 API安全實(shí)踐 289
16.5.1 API發(fā)現(xiàn) 289
16.5.2 生命周期管理 290
16.5.3 數(shù)據(jù)安全 290
16.5.4 攻擊防護(hù) 291
16.5.5 日志和審計(jì) 291
16.5.6 威脅檢測(cè) 291
16.5.7 使用API網(wǎng)關(guān) 292
16.5.8 微服務(wù)安全 292
16.6 小結(jié) 293
17 業(yè)務(wù)邏輯安全 294
17.1 賬號(hào)安全 294
17.1.1 注冊(cè)賬號(hào) 294
17.1.2 登錄賬號(hào) 296
17.1.3 退出賬號(hào) 297
17.1.4 找回密碼 298
17.2 圖形驗(yàn)證碼 299
17.2.1 驗(yàn)證邏輯 299
17.2.2 強(qiáng)度 300
17.3 并發(fā)場(chǎng)景 301
17.3.1 條件競(jìng)爭(zhēng) 301
17.3.2 臨時(shí)數(shù)據(jù) 302
17.3.3 支付邏輯缺陷 303
17.4 小結(jié) 304
18 開發(fā)語言的安全 305
18.1 PHP安全 305
18.1.1 變量覆蓋 305
18.1.2 空字節(jié)問題 306
18.1.3 弱類型 307
18.1.4 反序列化 307
18.1.5 安全配置 308
18.2 Java安全 309
18.2.1 Security Manager 309
18.2.2 反射 310
18.2.3 反序列化 312
18.3 Python安全 316
18.3.1 反序列化 316
18.3.2 代碼保護(hù) 317
18.4 JavaScript安全 317
18.4.1 第三方JavaScript資源 317
18.4.2 JavaScript框架 318
18.5 Node.js安全 319
18.6 小結(jié) 319
19 服務(wù)端安全配置 321
19.1 “最小權(quán)限”原則 321
19.2 Web服務(wù)器安全 323
19.2.1 nginx安全 323
19.2.2 Apache HTTP Server安全 326
19.3 數(shù)據(jù)庫(kù)安全 327
19.4 Web容器安全 329
19.4.1 Tomcat遠(yuǎn)程代碼執(zhí)行 330
19.4.2 Weblogic遠(yuǎn)程代碼執(zhí)行 331
19.5 Web中間件安全 332
19.6 日志與錯(cuò)誤信息 334
19.6.1 日志的記錄和留存 335
19.6.2 敏感信息處理 335
19.6.3 錯(cuò)誤處理 336
19.7 小結(jié) 337
20 代理和CDN安全 338
20.1 正向代理 338
20.2 反向代理 340
20.3 獲取真實(shí)IP地址 342
20.4 緩存投毒 343
20.5 請(qǐng)求夾帶攻擊 345
20.6 RangeAMP攻擊 348
20.7 域前置(Domain Fronting) 349
20.8 小結(jié) 352
21 應(yīng)用層拒絕服務(wù)攻擊 353
21.1 DDoS簡(jiǎn)介 353
21.2 應(yīng)用層DDoS攻擊 357
21.2.1 CC攻擊 357
21.2.2 限制請(qǐng)求頻率 359
21.2.3 道高一尺,魔高一丈 360
21.3 防御應(yīng)用層DDoS攻擊 362
21.3.1 IP威脅情報(bào)庫(kù) 362
21.3.2 JavaScript校驗(yàn) 363
21.3.3 客戶端指紋 364
21.3.4 人機(jī)校驗(yàn) 366
21.3.5 訪問行為識(shí)別 367
21.4 資源耗盡型攻擊 367
21.4.1 Slowloris攻擊 367
21.4.2 HTTP POST DoS 369
21.4.3 ReDoS 370
21.4.4 HashDoS 373
21.5 小結(jié) 374
22 爬蟲對(duì)抗 375
22.1 揭秘爬蟲 375
22.1.1 爬蟲的發(fā)展 376
22.1.2 行業(yè)挑戰(zhàn) 377
22.2 反爬蟲方案 378
22.2.1 客戶端特征 378
22.2.2 行為分析 379
22.2.3 圖形驗(yàn)證碼 381
22.2.4 IP信譽(yù) 381
22.2.5 代碼保護(hù) 382
22.2.6 數(shù)據(jù)保護(hù) 384
22.3 爬蟲對(duì)抗 385
22.4 小結(jié) 386
23 安全檢測(cè)和防御 387
23.1 Web應(yīng)用防火墻(WAF) 387
23.1.1 參數(shù)解析 389
23.1.2 攻擊檢測(cè) 393
23.1.3 日志分析 395
23.2 RASP 396
23.3 Web后門檢測(cè) 401
23.4 小結(jié) 405
24 機(jī)器學(xué)習(xí)在安全領(lǐng)域的應(yīng)用 406
24.1 機(jī)器學(xué)習(xí)概述 406
24.1.1 機(jī)器學(xué)習(xí)模型 407
24.1.2 模型指標(biāo) 410
24.2 攻擊檢測(cè) 411
24.2.1 Web攻擊檢測(cè) 411
24.2.2 識(shí)別釣魚網(wǎng)站 414
24.3 異常行為檢測(cè) 415
24.4 自動(dòng)化攻擊 417
24.4.1 識(shí)別驗(yàn)證碼 417
24.4.2 破譯密碼 418
24.5 攻擊機(jī)器學(xué)習(xí)模型 420
24.5.1 對(duì)抗性攻擊 420
24.5.2 信息竊取 423
24.5.3 模型投毒 423
24.6 小結(jié) 424
25 DevSecOps 426
25.1 為什么需要DevSecOps 426
25.2 DevSecOps原則 429
25.2.1 安全責(zé)任共擔(dān) 429
25.2.2 安全培訓(xùn) 430
25.2.3 安全左移 430
25.2.4 默認(rèn)安全 431
25.2.5 自動(dòng)化 431
25.3 DevSecOps工具鏈 431
25.3.1 需求分析與設(shè)計(jì) 432
25.3.2 軟件成分分析 433
25.3.3 安全測(cè)試 435
25.3.4 容器安全 439
25.3.5 代碼保護(hù) 439
25.3.6 威脅檢測(cè)和響應(yīng) 440
25.4 小結(jié) 441