Yoru Karu Studio

程式設計學習筆記 | 生活心得

03-9. 測試資料庫操作 ⏱️ 閱讀時間: 18 分鐘 🎯 難度: ⭐⭐⭐ (進階) 🤔 一句話解釋 測試資料庫操作需要隔離的測試環境,確保測試不會影響真實資料,且每次測試結果可預測。 🎯 測試策略 ┌─────────────────────────────────────────────────────────┐ │ 測試金字塔 │ ├─────────────────────────────────────────────────────────┤ │ ┌─────┐ │ │ / E2E \ 少量端對端測試 │ │ /─────────\ │ │ / Integration\ 整合測試 │ │ /───────────────\ │ │ / Unit Tests \ 大量單元測試 │ │ /───────────────────\ │ └─────────────────────────────────────────────────────────┘資料庫測試類型 類型 說明 速度 Mock 不實際連接資料庫 最快 SQLite 記憶體 使用記憶體資料庫 快 測試資料庫 使用獨立的測試 DB 中等 容器化 Docker 啟動測試 DB 較慢 📦 安裝測試工具 pip install pytest pytest-asyncio pytest-cov httpx pip install factory-boy faker # 測試資料生成 🔧 測試環境設定 pytest 設定 # conftest.

04-1. 認證基礎 ⏱️ 閱讀時間: 18 分鐘 🎯 難度: ⭐⭐⭐ (進階) 🤔 一句話解釋 認證(Authentication)是驗證「你是誰」,授權(Authorization)是決定「你能做什麼」。 🔐 認證 vs 授權 ┌─────────────────────────────────────────────────────────┐ │ 認證 (Authentication) │ │ │ │ 「你是誰?」 │ │ ┌─────────────────────────────────────────────┐ │ │ │ 使用者提供憑證(帳密、Token、憑證) │ │ │ │ ↓ │ │ │ │ 系統驗證身份 │ │ │ │ ↓ │ │ │ │ 確認:這是 John │ │ │ └─────────────────────────────────────────────┘ │ ├─────────────────────────────────────────────────────────┤ │ 授權 (Authorization) │ │ │ │ 「你能做什麼?」 │ │ ┌─────────────────────────────────────────────┐ │ │ │ John 要存取 /admin │ │ │ │ ↓ │ │ │ │ 檢查 John 的權限 │ │ │ │ ↓ │ │ │ │ John 是管理員嗎?→ 允許/拒絕 │ │ │ └─────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────┘ 🎯 常見認證方式 比較表 方式 適用場景 優點 缺點 Session 傳統 Web 安全、可撤銷 有狀態、擴展難 JWT API、SPA 無狀態、可擴展 無法撤銷、較大 OAuth 2.

04-2. JWT 認證 ⏱️ 閱讀時間: 20 分鐘 🎯 難度: ⭐⭐⭐ (進階) 🤔 一句話解釋 JWT(JSON Web Token)是一種自包含的 Token,包含了使用者資訊,伺服器不需要查詢資料庫就能驗證身份。 🔍 JWT 結構 JWT = Header.Payload.Signature ┌─────────────────────────────────────────────────────────┐ │ eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 │ ← Header │ . │ │ eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4ifQ │ ← Payload │ . │ │ SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c │ ← Signature └─────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────┐ │ Header(標頭) │ │ { │ │ "alg": "HS256", // 簽名演算法 │ │ "typ": "JWT" // Token 類型 │ │ } │ ├─────────────────────────────────────────────────────────┤ │ Payload(載荷) │ │ { │ │ "sub": "1234567890", // Subject(使用者 ID) │ │ "name": "John", // 自訂資料 │ │ "exp": 1516239022, // 過期時間 │ │ "iat": 1516239022 // 簽發時間 │ │ } │ ├─────────────────────────────────────────────────────────┤ │ Signature(簽名) │ │ HMACSHA256( │ │ base64UrlEncode(header) + ".

04-3. OAuth 2.0 ⏱️ 閱讀時間: 20 分鐘 🎯 難度: ⭐⭐⭐⭐ (高階) 🤔 一句話解釋 OAuth 2.0 是授權框架,讓第三方應用可以安全地存取使用者資源,而不需要知道使用者的密碼。 🔍 OAuth 2.0 角色 ┌─────────────────────────────────────────────────────────┐ │ OAuth 2.0 角色 │ ├─────────────────────────────────────────────────────────┤ │ │ │ Resource Owner(資源擁有者) │ │ └─ 就是「使用者」,擁有資源的人 │ │ │ │ Client(客戶端) │ │ └─ 第三方應用程式,想要存取使用者資源 │ │ │ │ Authorization Server(授權伺服器) │ │ └─ 負責驗證身份、核發 Token │ │ │ │ Resource Server(資源伺服器) │ │ └─ 存放使用者資源的伺服器 │ │ │ └─────────────────────────────────────────────────────────┘實際例子 你想用「某 App」登入 Google 帳號 Resource Owner = 你(使用者) Client = 某 App Authorization Server = Google OAuth Resource Server = Google API(取得你的 email、姓名等) 🔄 授權流程 Authorization Code Flow(最常用) ┌──────────────────────────────────────────────────────────────┐ │ Authorization Code Flow │ ├──────────────────────────────────────────────────────────────┤ │ │ │ 1.

04-4. 權限控制 ⏱️ 閱讀時間: 18 分鐘 🎯 難度: ⭐⭐⭐ (進階) 🤔 一句話解釋 權限控制(Authorization)決定已認證的使用者可以存取哪些資源、執行哪些操作。 🔐 權限模型 常見模型比較 ┌─────────────────────────────────────────────────────────┐ │ 1. RBAC(Role-Based Access Control) │ │ └─ 基於角色的存取控制 │ │ └─ 使用者 → 角色 → 權限 │ │ └─ 最常見,易於管理 │ ├─────────────────────────────────────────────────────────┤ │ 2. ABAC(Attribute-Based Access Control) │ │ └─ 基於屬性的存取控制 │ │ └─ 根據使用者屬性、資源屬性、環境條件判斷 │ │ └─ 更靈活,但較複雜 │ ├─────────────────────────────────────────────────────────┤ │ 3. ACL(Access Control List) │ │ └─ 存取控制列表 │ │ └─ 直接定義「誰」可以對「什麼」做「什麼」 │ │ └─ 細粒度控制,但難以擴展 │ └─────────────────────────────────────────────────────────┘ 🎭 RBAC 實作 Model 設計 from sqlalchemy import Column, Integer, String, Table, ForeignKey, Boolean from sqlalchemy.

04-5. 安全最佳實踐 ⏱️ 閱讀時間: 20 分鐘 🎯 難度: ⭐⭐⭐⭐ (高階) 🤔 一句話解釋 安全最佳實踐是一系列防護措施,保護你的 API 免受常見攻擊,包括注入、XSS、CSRF 等。 🛡️ OWASP Top 10 ┌─────────────────────────────────────────────────────────┐ │ OWASP API Security Top 10 │ ├─────────────────────────────────────────────────────────┤ │ 1. 失效的物件級授權(BOLA) │ │ 2. 失效的身份認證 │ │ 3. 過度的資料暴露 │ │ 4. 缺乏資源和速率限制 │ │ 5. 失效的功能級授權 │ │ 6. 大量指派 │ │ 7. 安全配置錯誤 │ │ 8. 注入攻擊 │ │ 9. 不當的資產管理 │ │ 10. 不足的日誌和監控 │ └─────────────────────────────────────────────────────────┘ 1️⃣ 防止 BOLA(物件級授權失效) 問題 # ❌ 危險:任何人都可以存取任何使用者的資料 @app.
0%