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