- 探索困擾當今Web應用的常見漏洞。
- 學習攻擊者進行漏洞利用攻擊所用的基本的黑客技術(shù)。
- 構(gòu)圖和記錄你無法直接訪問的Web應用。
- 開發(fā)并部署可以繞過常規(guī)防御機制的、定制的漏洞利用程序。
- 制訂并部署緩解措施,保護你的應用程序免受黑客攻擊。
- 將安全編碼的實踐融入到你的開發(fā)生命周期中。
- 獲取實用的技巧,幫助你提高Web應用程序的整體安全性。
雖然有很多網(wǎng)絡和IT安全方面的資源,但是直到現(xiàn)在,依然缺乏詳細的現(xiàn)代Web應用程序安全相關的知識。這本實用的指南提供了攻防兼?zhèn)涞陌踩^念,軟件工程師可以輕松學習和應用。
Salesforce的高級安全工程師Andrew Hoffman介紹了Web應用安全的三大支柱:偵察、攻擊和防御。你將學習有效研究和分析現(xiàn)代Web應用程序的方法,包括那些你無法直接訪問的應用程序。你還將學習如何使用的黑客技術(shù)來入侵Web應用。后,你將學到如何在自己的Web應用程序開發(fā)中采取緩解措施,以防止黑客攻擊。
前言
歡迎閱讀本書。在前言中,我們將討論閱讀和理解本書內(nèi)容所需的基礎知識。我們還將討論學習目標,并嘗試建立典型的讀者畫像,以便了解你是否將從這本書中受益。
如果不知道這本書是否適合你,或不確定通過你已有的專業(yè)知識背景能否掌握后續(xù)章節(jié)的內(nèi)容,請在繼續(xù)閱讀第1 章之前仔細閱讀前言中的內(nèi)容。
的知識和學習目標
這本書不僅可以幫助你學習如何保護Web 應用程序免受黑客攻擊,還可以引導你逐步了解黑客偵察和侵入Web 應用程序而采取的步驟。
在本書中,我們將討論黑客如今所使用的許多技術(shù),這些技術(shù)可用于入侵由公司、政府, 甚至業(yè)余愛好者托管的Web 應用程序。
在對前面提到的技術(shù)進行了充分的研究之后,我們開始討論如何保護Web 應用程序,免受這些黑客的攻擊。
在此過程中,你會發(fā)現(xiàn)全新的應用架構(gòu)設計思維方式,還將學習到如何將安全實踐整合到工程組織中。后,我們將對當前常見、危險的Web應用攻擊類型和相關技術(shù)進行評估。
讀完本書后,你所擁有的知識,可以對你沒有代碼級訪問權(quán)限的應用程序進行安全偵察。
你還將能夠識別Web 應用程序中的缺陷和漏洞,以及精心設計的、旨在破壞應用程序數(shù)據(jù)、中斷執(zhí)行流程或干擾Web 應用程序正常功能的網(wǎng)絡行為。
掌握了這些技能,以及關于保護Web 應用程序的后一節(jié)中獲得的知識,你將能夠識別Web 應用程序代碼庫中的危險區(qū)域,并了解如何編寫代碼來防御可能產(chǎn)生的應用程序攻擊,以使你的應用系統(tǒng)和用戶遠離風險。
本書的內(nèi)容是循序漸進的,所以如果你選擇跳過前面的內(nèi)容,就會發(fā)現(xiàn)自己缺少必要的先決條件和信息,只需回溯幾章的內(nèi)容即可。
未經(jīng)事先說明,不應在本書中出現(xiàn)本章內(nèi)容中未定義為前提的任何主題。
建議的背景知識
本書面向的潛在讀者范圍很廣,但是本書的編寫風格以及書中示例的組織形式,使其成為具有軟件工程中級背景知識人員的理想選擇。
你可能會問,軟件工程中級背景意味著什么?這個問題的答案因人而異。對技術(shù)高手而言,這本書實際上可能只需要軟件工程的入門級背景。換句話說,之前具有Web 開發(fā)和/ 或腳本編寫經(jīng)驗(如果足夠的話)的系統(tǒng)管理員,可以流暢地閱讀本書并理解所有示例。話雖如此,這本書中所含的代碼編寫示例既包括客戶端,也包括服務器,僅僅了解其中一部分不足以深入理解這些示例。
本書還包括有關基于HTTP 的基本客戶端/ 服務器聯(lián)網(wǎng)的討論。此外,在以后的章節(jié)中,我們會探討有關軟件體系結(jié)構(gòu)的內(nèi)容,我們將探究在降低安全風險的同時,將內(nèi)部軟件與第三方軟件集成的方法。
由于本書涵蓋了如此多的主題,因此我首先界定了所需的技能水平來成功完成本書的學習,即中級還是入門級,因為這本書不適合那些沒有任何編寫應用于生產(chǎn)環(huán)境的應用程序經(jīng)驗或知識的人。
技能要求
在這本書中,軟件工程中級背景意味著:
你可以使用至少一種編程語言編寫基本的 CRUD(Create、Read、Update、Delete,即創(chuàng)建、讀取、更新、刪除,俗稱增刪查改)程序。
你可以編寫運行在服務器上的代碼(例如后端代碼)。
你至少可以編寫一些在瀏覽器中運行的代碼(前端代碼,通常為JavaScript)。
你知道什么是 HTTP,并且能讀懂,甚至編寫通過 HTTP 進行 GET/POST調(diào)用的相關代碼。
你可以編寫,或至少能閱讀并理解使用服務器端和客戶端代碼的應用程序,該應用程序通過HTTP 進行通信。
你至少熟悉一種流行的數(shù)據(jù)庫(MySQL,MongoDB 等)。
這些技能是后續(xù)順利閱讀本書示例的標準。在這些要點之外的任何經(jīng)驗都會有幫助,這將使你更容易使用和從中獲得學習價值。
為簡便起見,本書中的大多數(shù)代碼示例都是使用JavaScript 編寫的(以便客戶端和服務器代碼使用相同的語言),但是大多數(shù)代碼都可以毫不費力地應用于其他語言中。
我盡力合理組織本書中的主題,以使它們以易接受的進度來逐步增加難度。我也嘗試在解釋中盡可能地細致明了。這意味著,每當涉及一項新技術(shù)時,我都會先簡要介紹一下該技術(shù)的簡要背景,并概述其工作原理。
誰能從閱讀本書中受益?
除了技能,我認為弄清誰將從本書中受益是很重要的,所以我想解釋一下我的目標受眾是誰。為此,根據(jù)學習目標和專業(yè)興趣來組織本節(jié)。即使你不屬于以下類別,仍然可以從本書中學習許多有價值,或至少感興趣的概念。
這本書是為了經(jīng)得起時間的考驗而寫的,因此,如果你以后打算從事下述目標讀者群中的某項職業(yè),那么本書中所有的專業(yè)知識都非常實用。
軟件工程師和Web 應用程序開發(fā)人員
客觀地說,這本書的主要讀者是職業(yè)生涯處于初期到中期的軟件工程師或Web 應用程序開發(fā)人員。理想情況下,該讀者對深入了解黑客使用的攻擊技術(shù),或安全工程師用來對抗黑客的防御技術(shù)感興趣。
一般來說,在本書的語境中,Web 應用程序開發(fā)人員和軟件工程師這兩個提法是可以互換的,考慮接下來的章節(jié)中這兩個名稱都會用到,為避免引起誤解,故而首先澄清一下。
略
Andrew Hoffman是Salesforce.com的高級安全工程師,負責多個JavaScript、Node.js和OSS團隊的安全工作。他的專長是DOM和JavaScript安全漏洞深入研究。他曾與各大瀏覽器廠商,包括TC39和WHATWG(Web Hypertext Application Technology Working Group,負責設計即將推出的JavaScript和瀏覽器DOM版本的組織)合作過。
目錄
前言 .1
第1 章 軟件安全歷程 .21
1.1 黑客的起源 . 21
1.2 Enigma 密碼機,約1930 年 22
1.3 自動Enigma 密碼破解,約1940 年 26
1.4 電話Phreaking,約1950 年 . 29
1.5 防Phreaking 技術(shù),約1960 年 31
1.6 計算機黑客的起源,約1980 年 32
1.7 互聯(lián)網(wǎng)的興起,約2000 年 . 34
1.8 現(xiàn)時代的黑客,約2015 年之后 36
1.9 小結(jié) 40
部分 偵察
第2 章 Web 應用偵察簡介 43
2.1 信息收集 43
2.2 Web 應用程序構(gòu)圖 46
2.3 小結(jié) 48
第3 章 現(xiàn)代Web 應用程序的結(jié)構(gòu) 49
3.1 現(xiàn)代的與傳統(tǒng)的Web 應用程序 49
3.2 REST API 52
3.3 JS 對象標記 55
3.4 JavaScript. 57
3.4.1 變量和作用域 58
3.4.2 函數(shù) 61
3.4.3 上下文 . 62
3.4.4 原型繼承. 63
3.4.5 異步模型. 66
3.4.6 瀏覽器DOM . 69
3.5 SPA 框架 71
3.6 認證和授權(quán)系統(tǒng) 72
3.6.1 認證 73
3.6.2 授權(quán) 74
3.7 Web 服務器 . 74
3.8 服務器端數(shù)據(jù)庫 76
3.9 客戶端數(shù)據(jù)存儲 77
3.10 小結(jié) . 78
第4 章 尋找子域 79
4.1 單域多應用程序 79
4.2 瀏覽器內(nèi)置的網(wǎng)絡分析工具 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 小結(jié) . 103
第5 章 API 分析 105
5.1 端點探索 105
5.2 認證機制 109
5.3 端點的模型 111
5.3.1 常見模型 111
5.3.2 特定于應用的模型 112
5.4 小結(jié) . 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 探測數(shù)據(jù)庫 . 125
6.3 小結(jié) . 127
第7 章 定位應用架構(gòu)中的薄弱點 128
7.1 安全架構(gòu)與不安全架構(gòu)的標志 129
7.2 多層安全機制 . 134
7.3 采納和重構(gòu) 135
7.4 小結(jié) . 137
第8 章 部分總結(jié) 139
第二部分 攻擊
第9 章 Web 應用入侵簡介 143
9.1 黑客的心態(tài) 143
9.2 運用偵察 145
第10 章 XSS 攻擊 147
10.1 XSS 的發(fā)現(xiàn)和利用 148
10.2 儲存型XSS 152
10.3 反射型XSS 154
10.4 DOM 型XSS 157
10.5 突變型XSS 160
10.6 小結(jié) 162
第11 章 CSRF 攻擊 . 163
11.1 查詢參數(shù)篡改 164
11.2 替換GET 的有效載荷 169
11.3 針對POST 端點的CSRF 170
11.4 小結(jié) 172
第12 章 XXE 攻擊 173
12.1 直接型XXE 174
12.2 間接型XXE 177
12.3 小結(jié) 179
第13 章 注入攻擊 . 181
13.1 SQL 注入攻擊 181
13.2 代碼注入 . 186
13.3 命令注入 . 191
13.4 小結(jié) 195
第14 章 DoS 攻擊 196
14.1 ReDoS(Regex DoS)攻擊 197
14.2 邏輯DoS 攻擊 . 200
14.3 DDoS(分布式DoS)攻擊 204
14.4 小結(jié) 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(公共漏洞和披露)數(shù)據(jù)庫 216
15.4 小結(jié) 217
第16 章 第二部分總結(jié) 219
第三部分 防御
第17 章 現(xiàn)代Web 應用加固 223
17.1 防御性軟件架構(gòu) 224
17.2 全面的代碼審查 225
17.3 漏洞發(fā)現(xiàn) . 225
17.4 漏洞分析 . 226
17.5 漏洞管理 . 227
17.6 回歸測試 . 228
17.7 緩解策略 . 228
17.8 應用偵察和攻擊技術(shù) 229
第18 章 安全的應用架構(gòu) 230
18.1 分析功能需求 231
18.2 認證和授權(quán) 232
18.2.1 SSL 和TLS 232
18.2.2 安全的憑證 234
18.2.3 散列憑證信息 . 235
18.2.4 2FA 認證 238
18.3 PII 和財務數(shù)據(jù) 239
18.4 搜索 240
18.5 小結(jié) 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 小結(jié) 253
第20 章 漏洞發(fā)現(xiàn) . 255
20.1 安全自動化 255
20.1.1 靜態(tài)分析 256
20.1.2 動態(tài)分析 258
20.1.3 漏洞回歸測試 . 259
20.2 責任披露計劃 262
20.3 漏洞賞金計劃 263
20.4 第三方滲透測試 264
20.5 小結(jié) 265
第21 章 漏洞管理 . 266
21.1 漏洞重現(xiàn) . 266
21.2 漏洞嚴重等級 267
21.3 通用漏洞評分系統(tǒng) . 268
21.3.1 CVSS:基礎評分 . 269
21.3.2 CVSS:時間評分 . 271
21.3.3 CVSS:環(huán)境評分 . 272
21.4 高級漏洞評分 273
21.5 分揀、評分之后 274
21.6 小結(jié) 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 實現(xiàn)CSP 288
22.5 小結(jié) 288
第23 章 防御CSRF 攻擊 290
23.1 標頭驗證 . 290
23.2 CSRF 令牌 . 292
23.3 防CRSF 編碼實踐 294
23.3.1 無狀態(tài)GET 請求 294
23.3.2 應用級CSRF 緩解 296
23.4 小結(jié) 297
第24 章 防御XXE 攻擊 . 299
24.1 評估其他數(shù)據(jù)格式 . 300
24.2 高級XXE 風險 301
24.3 小結(jié) 302
第25 章 防御注入攻擊 303
25.1 緩解SQL 注入攻擊 303
25.1.1 SQL 注入檢測 . 304
25.1.2 預編譯語句 306
25.1.3 特定于數(shù)據(jù)庫的防御 308
25.2 通用注入防御 308
25.2.1 潛在的注入目標 309
25.2.2 小權(quán)限原則 . 310
25.2.3 命令白名單化 . 311
25.3 小結(jié) 312
第26 章 防御DoS 攻擊 . 314
26.1 防范Regex DoS 攻擊 315
26.2 防范邏輯DoS 攻擊 315
26.3 防范DDoS 攻擊 . 316
26.4 緩解DDoS 攻擊 . 317
26.5 小結(jié) 318
第27 章 加固第三方依賴 320
27.1 評估依賴關系樹 320
27.1.1 依賴關系樹建模 321
27.1.2 依賴關系樹實例 322
27.1.3 自動評估 322
27.2 安全集成技術(shù) 323
27.2.1 關注點分離 323
27.2.2 安全包管理 324
27.3 小結(jié) 325
第28 章 第三部分小結(jié) 327
28.1 軟件安全的歷史 327
28.2 Web 應用偵察 329
28.3 攻擊 331
28.4 防御 332
第29 章 總結(jié) . 336
作者介紹 339
封面介紹 339