內容簡介
本書分為5大部分,共17章,詳細介紹了Web安全開發的bi備知識,旨在讓前端開發人員、設計師、產品經理等前端開發相關人士了解新形勢下的安全技能,涉及從zui新的智慧型手機到老舊的台式計算機等各種設備,並且不限定平台。具體內容包括:制訂安全計畫,運用成功的編碼實踐,創建有用及高效的測試策略,實現維護周期,查找安全資源。
圖書目錄
前言 xv
第 一部分 制訂安全計畫
第 1 章 定義套用環境 2
1.1 明確Web 套用威脅 3
1.2 理解軟體安全保障 6
1.2.1 考慮OSSAP 7
1.2.2 定義SSA 的要求 8
1.2.3 對數據和資源分類 9
1.2.4 進行必要的分析 9
1.3 探究與語言相關的問題 12
1.3.1 定義HTML 的關鍵問題 12
1.3.2 定義CSS 的關鍵問題 13
1.3.3 定義JavaScript 的關鍵問題 13
1.4 考慮端點的防禦要素 14
1.4.1 預防安全漏洞 14
1.4.2 檢測安全漏洞 15
1.4.3 修復受損的軟體 16
1.5 處理雲存儲 16
1.6 使用外部代碼和資源 17
1.6.1 定義庫的使用 18
1.6.2 定義API 的使用 19
1.6.3 定義微服務的使用 20
1.6.4 訪問外部數據 21
1.7 允許他人訪問 22
第 2 章 迎合用戶需求與期望 24
2.1 從用戶的視角看待應用程式 24
2.2 考慮自帶設備的問題 25
2.2.1 理解基於Web 的應用程式的安全性 26
2.2.2 考慮原生套用的問題 27
2.2.3 使用定製化瀏覽器 27
2.2.4 驗證代碼兼容性問題 29
2.2.5 處理幾乎連續的設備更新 31
2.3 設計密碼的可選方案 32
2.3.1 使用口令 33
2.3.2 使用生物識別的方案 33
2.3.3 依靠鑰匙卡 35
2.3.4 依靠USB key 36
2.3.5 實現令牌策略 36
2.4 聚焦用戶期望 37
2.4.1 讓應用程式易於使用 37
2.4.2 讓應用程式快速運行 37
2.4.3 創建可靠的環境 38
2.4.4 客觀看待安全性 38
第3 章 獲取第三方幫助 39
3.1 發現第三方安全解決方案 39
3.2 考慮雲安全方案 41
3.2.1 理解數據倉庫 42
3.2.2 處理檔案共享問題 43
3.2.3 考慮雲存儲 46
3.3 選擇產品類型 47
3.3.1 使用庫 47
3.3.2 訪問API 48
3.3.3 考慮微服務 49
第 二部分 運用成功的編碼實踐
第4 章 開發成功的界面 52
4.1 評估UI 53
4.1.1 創建簡潔的界面 53
4.1.2 使界面靈活 56
4.1.3 提供輔助功能 58
4.1.4 定義可訪問性問題 59
4.2 提供受控制的選擇 61
4.3 選擇UI 的解決方案級別 65
4.3.1 實現標準的HTML 控制項 65
4.3.2 使用CSS 控制項 65
4.3.3 用JavaScript 創建控制項 67
4.4 校驗輸入 68
4.4.1 只允許特定的輸入 68
4.4.2 查找鬼祟的輸入 69
4.4.3 請求新的輸入 69
4.4.4 使用客戶端和伺服器端校驗 70
4.5 期待意外 71
第5 章 構建可靠的代碼 72
5.1 區分可靠性和安全性 73
5.1.1 定義可靠性和安全性的角色 73
5.1.2 避免可靠代碼中的安全漏洞 76
5.1.3 聚焦應用程式的功能 77
5.2 開發團隊協定 77
5.3 創建經驗教訓的反饋迴路 80
5.4 考慮成套解決方案的問題 81
5.4.1 處理外部庫 82
5.4.2 處理外部API 83
5.4.3 使用框架 85
5.4.4 調用微服務 87
第6 章 包含庫 88
6.1 考慮庫的使用 89
6.1.1 用庫增強CSS 89
6.1.2 用庫與HTML 互動 91
6.1.3 用庫擴展JavaScript 93
6.2 區分內部存儲庫和外部存儲庫 95
6.3 定義庫帶來的安全威脅 95
6.3.1 啟用嚴格模式 97
6.3.2 開發CSP 99
6.4 安全地包含庫 100
6.4.1 充分研究庫 101
6.4.2 精 確定義庫的使用 101
6.4.3 保持庫的小規模和內容聚焦 101
6.4.4 執行必需的測試 102
6.5 區分庫和框架 103
第7 章 慎用API 105
7.1 區分API 和庫 106
7.1.1 考慮流行速度上的差異 106
7.1.2 區分用法上的差異 107
7.2 用API 擴展JavaScript 108
7.2.1 定位合適的API 108
7.2.2 創建簡單示例 109
7.3 定義API 帶來的安全威脅 113
7.3.1 MailPoet 毀了你的好聲譽 113
7.3.2 開發閱後即焚的圖片 114
7.3.3 使用“找回我的iPhone”卻丟了手機 114
7.3.4 Heartbleed 泄露你**重要的信息 115
7.3.5 遭受Shellshock 攻擊 115
7.4 通過JavaScript 安全訪問API 116
7.4.1 驗證API 的安全性 116
7.4.2 測試輸入和輸出 117
7.4.3 保持數據的局部性和安全性 117
7.4.4 防禦性編碼 117
第8 章 考慮使用微服務 118
8.1 定義微服務 119
8.1.1 詳述微服務的特點 119
8.1.2 區分微服務與庫 120
8.1.3 區分微服務與API 120
8.1.4 考慮微服務的策略 120
8.2 用JavaScript 調用微服務 121
8.2.1 理解通信中REST 的角色 122
8.2.2 用JSON 傳輸數據 123
8.2.3 用Node.js 和Seneca 創建微服務 124
8.3 定義微服務帶來的安全威脅 126
8.3.1 缺少一致性 126
8.3.2 考慮虛擬機的角色 126
8.3.3 使用JSON 進行數據傳輸 127
8.3.4 定義傳輸層的安全 128
8.4 創建可替換的微服務路徑 129
第三部分 創建有用及高效的測試策略
第9 章 像黑客一樣思考 132
9.1 定義Web 安全掃描的需求 132
9.2 構建測試系統 136
9.2.1 考慮測試系統的使用 136
9.2.2 接受必需的訓練 136
9.2.3 創建正確的環境 137
9.2.4 使用虛擬機 137
9.2.5 獲取工具 138
9.2.6 配置系統 138
9.2.7 恢復系統 139
9.3 定義**常見的漏洞源 139
9.3.1 避免SQL 注入攻擊 140
9.3.2 理解跨站腳本攻擊 141
9.3.3 解決拒絕服務攻擊問題 142
9.3.4 去除可預測的資源定位 142
9.3.5 克服無意的信息泄露 143
9.4 在BYOD 環境中進行測試 143
9.4.1 配置遠程訪問區域 144
9.4.2 檢查跨應用程式的攻擊 144
9.4.3 處理真正古老的設備和軟體 145
9.5 依靠用戶測試 145
9.5.1 讓用戶橫衝直撞 146
9.5.2 開發可重現的步驟 147
9.5.3 讓用戶發聲 147
9.6 使用外部的安全測試人員 148
9.6.1 考慮滲透測試公司 148
9.6.2 管理項目 149
9.6.3 覆蓋要點 149
9.6.4 獲取報告 149
第 10 章 創建API 安全區域 151
10.1 理解API 安全區域的概念 152
10.2 定義API 安全區域的需求 153
10.2.1 確保API 可以工作 153
10.2.2 實現快速開發 153
10.2.3 證明**佳的集成 154
10.2.4 在負載情況下驗證API 的表現 158
10.2.5 使API 遠離黑客 159
10.3 用API 沙盒進行開發 159
10.3.1 使用現成的解決方案 161
10.3.2 使用其他供應商的沙盒 162
10.4 考慮虛擬環境 164
10.4.1 定義虛擬環境 164
10.4.2 區分虛擬環境和沙盒 164
10.4.3 實現虛擬化 165
10.4.4 依靠應用程式虛擬化 165
第 11 章 檢查庫和API 的漏洞 167
11.1 創建測試計畫 168
11.1.1 考慮目的和目標 168
11.1.2 測試內部庫 175
11.1.3 測試內部API 175
11.1.4 測試外部庫 175
11.1.5 測試外部API 176
11.1.6 擴展測試到微服務 176
11.2 單獨測試庫和API 177
11.2.1 為庫創建測試框架 177
11.2.2 為API 創建測試腳本 178
11.2.3 將測試策略擴展到微服務 178
11.2.4 開發回響策略 178
11.3 執行集成測試 179
11.4 測試與語言相關的問題 180
11.4.1 設計針對HTML 問題的測試 180
11.4.2 設計針對CSS 問題的測試 181
11.4.3 設計針對JavaScript 問題的測試 181
第 12 章 使用第三方測試 184
12.1 找到第三方測試服務 185
12.1.1 定義聘請第三方的理由 185
12.1.2 考慮測試服務的範圍 186
12.1.3 確保第三方是合法的 188
12.1.4 面試第三方 188
12.1.5 對測試的搭建進行測試 188
12.2 創建測試計畫 189
12.2.1 指明第三方在測試中的目的 189
12.2.2 創建書面的測試計畫 189
12.2.3 枚舉測試輸出和報告的要求 190
12.2.4 考慮測試需求 190
12.3 實施測試計畫 190
12.3.1 確定公司參與測試的程度 191
12.3.2 開始測試過程 191
12.3.3 執行必需的測試監控 191
12.3.4 處理意外的測試問題 192
12.4 使用結果報告 192
12.4.1 與第三方討論報告輸出 192
12.4.2 向公司展示報告 193
12.4.3 根據測試建議採取行動 193
第四部分 實現維護周期
第 13 章 明確定義升級周期 196
13.1 制訂詳細的升級周期計畫 196
13.1.1 尋找升級 198
13.1.2 確定升級的要求 198
13.1.3 定義升級的臨界點 200
13.1.4 檢查升級的問題 201
13.1.5 創建測試場景 202
13.1.6 實施變更 203
13.2 制訂升級測試計畫 203
13.2.1 執行所需的預測試 204
13.2.2 執行所需的集成測試 204
13.3 將升級移到生產環境 205
第 14 章 考慮更新選項 207
14.1 區分升級和更新 208
14.2 確定何時更新 209
14.2.1 處理庫的更新 209
14.2.2 處理API 和微服務的更新 210
14.2.3 接受自動更新 211
14.3 更新語言套件 212
14.3.1 創建語言支持清單 212
14.3.2 獲得可靠的語言專家 213
14.3.3 驗證與語言相關的提示符能否在應用程式中起效 214
14.3.4 確保數據以正確的格式呈現 214
14.3.5 定義語言支持測試的特殊要求 214
14.4 執行緊急更新 215
14.4.1 儘可能避免緊急情況 215
14.4.2 組建快速回響團隊 215
14.4.3 執行簡化的測試 216
14.4.4 制訂持久的更新計畫 216
14.5 制訂更新測試計畫 216
第 15 章 考慮報告的需要 218
15.1 使用報告以做出改變 219
15.1.1 避免無用的報告 219
15.1.2 安排時間為升級和更新做出報告 220
15.1.3 使用自動生成的報告 221
15.1.4 使用定製的報告 221
15.1.5 創建一致的報告 222
15.1.6 使用報告執行特定的套用任務 223
15.2 創建內部報告 223
15.2.1 確定使用哪些數據源 223
15.2.2 指定報告的使用 224
15.3 依靠外部生成的報告 225
15.3.1 從第三方獲取完整的報告 225
15.3.2 從原始數據創建報告 225
15.3.3 保持內部數據安全 225
15.4 提供用戶反饋 226
15.4.1 獲取用戶反饋 226
15.4.2 確定用戶反饋的可用性 227
第五部分 查找安全資源
第 16 章 跟蹤當前的安全威脅 230
16.1 發現安全威脅信息的來源 231
16.1.1 閱讀與安全相關的專業文章 231
16.1.2 查看安全網站 232
16.1.3 獲取顧問的意見 234
16.2 避免信息泛濫 235
16.3 為基於威脅的升級制訂計畫 236
16.3.1 預判不需要採取任何行動的情況 236
16.3.2 決定升級還是更新 236
16.3.3 定義升級計畫 238
16.4 為基於威脅的更新制訂計畫 238
16.4.1 驗證更新是否可解決威脅 239
16.4.2 確定威脅是否緊急 240
16.4.3 定義更新計畫 240
16.4.4 要求來自第三方的更新 240
第 17 章 獲取必需的培訓 241
17.1 制訂內部的安全培訓計畫 242
17.1.1 定義所需的培訓 242
17.1.2 設定合理的目標 243
17.1.3 使用內部培訓師 243
17.1.4 監控結果 244
17.2 獲取第三方對開發人員的培訓 245
17.2.1 指定培訓的要求 246
17.2.2 為公司聘請第三方培訓師 247
17.2.3 使用線上學校 247
17.2.4 依靠培訓中心 248
17.2.5 利用本地的學院和大學 248
17.3 確保用戶有安全意識 249
17.3.1 制定專門的安全培訓 249
17.3.2 結合書面指南進行培訓 249
17.3.3 創建並使用替代的安全提醒 250
17.3.4 進行培訓有效性檢查 250
關於作者 251
關於封面 251
著作權聲明 252