API 安全實戰 (API Security in Action)

Neil Madden

買這商品的人也買了...

商品描述

本書旨在引導讀者掌握在不同環境下確保API安全所需的技術。
首先介紹基本的安全編碼技術,之後深入研究身份認證和授權技術。
全書共5部分,13章,其中:
第1部分介紹了API安全的基本原理,是本書其餘內容的基礎;
第2部分更詳細地介紹RESTful API的身份驗證機制;
第3部分介紹了授權(authorization)相關的內容;
第4部分深入探討瞭如何確保運行在Kubernetes環境下的微服務API的安全性;
第5部分介紹物聯網(IoT)中的API。
這類API的安全尤其有挑戰性,因為物聯網設備的能力往往很有限,並且會遭遇到各種各樣的威脅。
對於構建Web程序有一定經驗的開發人員來講,
本書可以提高他們對API安全技術和zui佳實踐的了解,也有助於技術架構師緊跟最新API安全方法技術更新的步伐。

目錄大綱

譯者序
前言
致謝
關於本書
關於作者
第一部分基礎
第1章什麼是API安全 2
1.1 打個比方:參加駕照考試 3
1.2 什麼是API 4
1.3 API安全上下文 6
1.4 API安全要素 10
1.4.1 資產 11
1.4.2 安全目標 11
1.4.3 環境與威脅模型 13
1.5 安全機制 15
1.5.1 加密 16
1.5.2 身份識別和身份驗證 17
1.5.3 訪問控制和授權 18
1.5.4 審計日誌 19
1.5.5 速率限制 20
小測驗答案 21
小結 21
第2章安全API開發 22
2.1 Natter API 22
2.1.1 Natter API概覽 23
2.1.2 功能實現概覽 24
2.1.3 設置項目 25
2.1.4 初始化數據庫 26
2.2 開發REST API 28
2.3 連接REST終端 31
2.4 注入攻擊 33
2.4.1 防御注入攻擊 37
2.4.2 使用權限緩解SQL注入攻擊 39
2.5 輸入驗證 40
2.6 生成安全的輸出 45
2.6.1 利用XSS攻擊 47
2.6.2 防禦XSS攻擊 49
2.6.3 實施防護 50
小測驗答案 52
小結 53
第3章加固Natter API 54
3.1 使用安全控制來處置威脅 54
3.2 速率限制解決可用性 55
3.3 使用身份驗證抵禦欺騙 61
3.3.1 HTTP基本身份驗證 62
3.3.2 使用Scrypt確保密碼安全存儲 62
3.3.3 創建密碼數據庫 63
3.3.4 在Natter API中註冊用戶 64
3.3.5 驗證用戶 66
3.4 使用加密確保數據不公開 68
3.4.1 啟用HTTPS 70
3.4.2 加強數據傳輸安全 71
3.5 使用審計日誌問責 72
3.6 訪問控制 77
3.6.1 強制身份驗證 78
3.6.2 訪問控制列表 79
3.6.3 Natter的強制訪問控制 81
3.6.4 Natter空間增加新成員 83
3.6.5 避免提權攻擊 84
小測驗答案 85
小結 85
第二部分基於令牌的身份驗證
第4章會話Cookie驗證 88
4.1 Web瀏覽器的身份驗證 88
4.1.1 在JavaScript中調用Natter API 89
4.1.2 表單提交攔截 91
4.1.3 提供同源HTML服務 91
4.1.4 HTTP認證的缺點 94
4.2 基於令牌的身份驗證 95
4.2.1 令牌存儲抽象 97
4.2.2 基於令牌登錄的實現 98
4.3 Session Cookie 100
4.3.1 防範會話固定攻擊 103
4.3.2 Cookie安全屬性 105
4.3.3 驗證會話Cookie 107
4.4 防範跨站請求偽造攻擊 109
4.4.1 SameSite Cookie 111
4.4.2 基於哈希計算的雙重提交Cookie 113
4.4.3 在Natter API中應用雙重提交Cookie 116
4.5 構建Natter登錄UI 121
4.6 實現註銷 125
小測驗答案 127
小結 127
第5章最新的基於令牌的身份驗證 128
5.1 使用CORS允許跨域請求 128
5.1.1 預檢請求 129
5.1.2 CORS頭 131
5.1.3 在Natter API中添加CORS頭部 132
5.2 不使用Cookie的令牌 135
5.2.1 在數據庫中保存令牌的狀態 136
5.2.2 Bearer身份驗證方案 141
5.2.3 刪除過期令牌 143
5.2.4 在Web存儲中存儲令牌 143
5.2.5 修改CORS過濾器 146
5.2.6 對Web存儲的XSS攻擊 147
5.3 加固數據庫令牌存儲 149
5.3.1 對數據庫令牌進行哈希計算 150
5.3.2 使用HMAC驗證令牌 151
5.3.3 保護敏感屬性 156
小測驗答案 158
小結 159
第6章自包含令牌和JWT 160
6.1 在客戶端存儲令牌狀態 160
6.2 JSON Web令牌 163
6.2.1 標準JWT聲明 165
6.2.2 JOSE頭部 166
6.2.3 生成標準的JWT 168
6.2.4 驗證簽名JWT 171
6.3 加密敏感屬性 172
6.3.1 認證加密 173
6.3.2 NaCl認證加密 175
6.3.3 加密JWT 177
6.3.4 使用JWT庫 180
6.4 使用安全類型來加固API設計 183
6.5 處理令牌撤銷 185
小測驗答案 189
小結 189
第三部分授權
第7章OAuth2和OpenID Connect 192
7.1 作用域令牌 193
7.1.1 在Natter中添加作用域令牌 193
7.1.2 作用域和權限之間的區別 197
7.2 OAuth2簡介 200
7.2.1 客戶端類型 201
7.2.2 授權許可 201
7.2.3 發現OAuth2終端 203
7.3 授權碼許可 204
7.3.1 重定向不同類型客戶端的URI 208
7.3.2 使用PKCE增強授權碼交換安全性 209
7.3.3 刷新令牌 210
7.4 驗證訪問令牌 211
7.4.1 令牌自省 212
7.4.2 確保HTTPS客戶端配置安全 217
7.4.3 令牌撤銷 219
7.4.4 JWT訪問令牌 221
7.4.5 加密JWT訪問令牌 227
7.4.6 讓AS解密令牌 228
7.5 單點登錄 229
7.6 OpenID Connect 230
7.6.1 ID令牌 231
7.6.2 加固OIDC 232
7.6.3 向API傳遞ID令牌 233
小測驗答案 235
小結 235
第8章基於身份的訪問控制 237
8.1 用戶和組 237
8.2 基於角色的訪問控制 243
8.2.1 角色映射權限 244
8.2.2 靜態角色 245
8.2.3 確定用戶角色 247
8.2.4 動態角色 248
8.3 基於屬性的訪問控制 249
8.3.1 組合決策 251
8.3.2 實現ABAC策略 252
8.3.3 策略代理和API網關 256
8.3.4 分佈式策略實施和XACML 257
8.3.5 ABAC最佳實踐 258
小測驗答案 260
小結 260
第9章基於能力的安全和Macaroon 261
9.1 基於能力的安全 261
9.2 能力和REST API 263
9.2.1 能力URI 265
9.2.2 在Natter API中使用能力URI 268
9.2.3 HATEOAS 272
9.2.4 基於瀏覽器客戶端的能力URI 276
9.2.5 能力與身份相結合 278
9.2.6 加固能力URI 279
9.3 Macaroon:含有caveat的令牌 282
9.3.1 上下文caveat 284
9.3.2 Macaroon令牌存儲 285
9.3.3 第一方caveat 288
9.3.4 第三方caveat 291
小測驗答案 293
小結 293
第四部分Kubernetes中的微服務API及服務到服務API的安全
第10章Kubernetes中的微服務API 296
10.1 Kubernetes上的微服務API 297
10.2 在Kubernetes上部署Natter API 300
10.2.1 將H2數據庫構建為Docker容器 301
10.2.2 將數據庫部署到Kubernetes 305
10.2.3 將Natter API構建為Docker容器 309
10.2.4 鏈接預覽微服務 313
10.2.5 部署新的微服務 315
10.2.6 調用鏈接預覽微服務 317
10.2.7 防範SSRF攻擊 320
10.2.8 DNS重綁定攻擊 325
10.3 確保微服務通信安全 327
10.3.1 使用TLS來保證通信安全 327
10.3.2 使用TLS服務網格 329
10.3.3 鎖定網絡連接 333
10.4 確保輸入請求的安全性 335
小測驗答案 339
小結 339
第11章服務到服務API的安全 340
11.1 API密鑰和JWT Bearer身份驗證 340
11.2 OAuth2客戶端憑證許可 342
11.3 OAuth2的JWT Bearer許可 345
11.3.1 客戶端驗證 346
11.3.2 生成JWT 349
11.3.3 服務賬戶身份驗證 351
11.4 Mutual TLS驗證 352
11.4.1 TLS證書認證的工作原理 352
11.4.2 客戶端證書驗證 355
11.4.3 驗證客戶端標識 356
11.4.4 使用服務網格 361
11.4.5 基於OAuth2的mTLS 363
11.4.6 證書綁定訪問令牌 364
11.5 管理服務憑證 368
11.5.1 Kubernets secret 369
11.5.2 密鑰和secret管理服務 373
11.5.3 避免在磁盤上保存長生命週期的secret 376
11.5.4 派生密鑰 377
11.6 響應用戶請求的服務API調用 381
11.6.1 phantom憑證模式 381
11.6.2 OAuth2令牌交換 383
小測驗答案 386
小結 387
第五部分用於物聯網的API
第12章物聯網通信安全 390
12.1 傳輸層安全 391
12.1.1 數據報TLS 392
12.1.2 受限設備的密碼套件 402
12.2 預共享密鑰 407
12.2.1 實現一個PSK服務器 408
12.2.2 PSK客戶端 411
12.2.3 支持原始PSK密碼套件 412
12.2.4 具有前向保密性的PSK 413
12.3 端到端安全 415
12.3.1 COSE 416
12.3.2 COSE的替代方案 420
12.3.3 防濫用認證加密 422
12.4 密鑰分發與管理 426
12.4.1 一次性密鑰配置 426
12.4.2 密鑰分發服務器 427
12.4.3 前向保密Ratcheting技術 428
12.4.4 後向安全 430
小測驗答案 432
小結 432
第13章物聯網API安全 433
13.1 設備驗證 433
13.1.1 識別設備 433
13.1.2 設備證書 436
13.1.3 傳輸層驗證 437
13.2 端到端驗證 440
13.2.1 OSCORE 443
13.2.2 REST API中避免消息重放 450
13.3 受限環境下的OAuth2 455
13.3.1 設備授權許可 455
13.3.2 ACE-OAuth 459
13.4 離線訪問控制 460
13.4.1 離線用戶身份驗證 460
13.4.2 離線授權 462
小測驗答案 463
小結 463
附錄A 配置Java和Maven 464
附錄B 配置Kubernets 473