實戰:安全 API 實作

Vibe Prompt

「幫我建立一個安全的 FastAPI 服務:加入 Rate Limiting、CORS、JWT 驗證、輸入驗證、日誌記錄。」

from fastapi import FastAPI, Depends, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from fastapi.security import HTTPBearer
import jwt, time, hashlib
from pydantic import BaseModel, EmailStr
from slowapi import Limiter
from slowapi.util import get_remote_address

app = FastAPI(title="安全 API 範例")
limiter = Limiter(key_func=get_remote_address)
app.state.limiter = limiter

# CORS
app.add_middleware(
    CORSMiddleware,
    allow_origins=["https://vibe-tutor.com"],
    allow_credentials=True,
    allow_methods=["GET", "POST"],
    allow_headers=["Authorization", "Content-Type"],
)

# Rate Limiting
@app.get("/api/public")
@limiter.limit("10/minute")
async def public_endpoint():
    return {"message": "公開端點"}

# 輸入驗證
class UserCreate(BaseModel):
    email: EmailStr
    name: str
    age: int
    
    @validator('age')
    def validate_age(cls, v):
        if v < 0 or v > 150:
            raise ValueError('年齡無效')
        return v
    
    @validator('name')
    def sanitize_name(cls, v):
        # 移除潛在的 XSS
        import re
        return re.sub(r'[<>"]', '', v)

@app.post("/api/users", status_code=201)
async def create_user(user: UserCreate):
    # 參數化查詢
    import psycopg2
    conn = psycopg2.connect("dbname=test")
    cur = conn.cursor()
    cur.execute(
        "INSERT INTO users (email, name, age) VALUES (%s, %s, %s)",
        (user.email, user.name, user.age)
    )
    conn.commit()
    return {"status": "ok"}

# 請求日誌
@app.middleware("http")
async def log_requests(request, call_next):
    start = time.time()
    response = await call_next(request)
    elapsed = time.time() - start
    print(f"{request.method} {request.url.path} {response.status_code} {elapsed:.3f}s")
    return response

課程總結

Web Security 完成!

  • ✅ OWASP Top 10
  • ✅ SQL Injection 防護
  • ✅ XSS + CSP
  • ✅ CSRF + SameSite
  • ✅ 安全 API 實戰

關鍵要點

  • ✅ OWASP Top 10 = Web 應用安全最具權威的風險列表
  • ✅ SQL Injection:永遠使用參數化查詢,不要串接字串
  • ✅ XSS:對使用者輸入進行轉義(Escape),使用 CSP Header
  • ✅ CSRF:使用 SameSite Cookie + CSRF Token 雙重保護
  • ✅ 安全是設計階段就要考慮的,不是上線前才補

OWASP Top 10 (2021)

| 排名 | 漏洞 | 說明 | |:----:|------|------| | A01 | 權限控制失效 | IDOR、越權 | | A02 | 加密機制失效 | 未加密敏感資料 | | A03 | 注入攻擊 | SQL、NoSQL、Command Injection | | A04 | 不安全設計 | 安全未在設計階段考慮 | | A05 | 安全配置錯誤 | 預設密碼、未關閉除錯模式 | | A06 | 脆弱元件 | 使用有已知漏洞的套件版本 | | A07 | 認證與身分管理失效 | 弱密碼、Session 固定 | | A08 | 資料完整性失效 | 不安全的反序列化 | | A09 | 日誌與監控不足 | 無法偵測攻擊 | | A10 | SSRF | 伺服器端請求偽造 |



安全 API 實戰:把學到的知識應用在真實專案

前面幾章學了 SQL Injection、XSS、CSRF。這章把它們全部整合——設計一個安全的 API 從認證到輸出的完整防護。

API 安全檢查清單

  • [ ] 使用 HTTPS(Certificate 設定正確、HSTS Header)
  • [ ] 輸入驗證(型態、長度、格式——拒絕無效輸入)
  • [ ] 參數化查詢(SQL 注入防護)
  • [ ] 輸出跳脫(XSS 防護)
  • [ ] CSRF Token(狀態變更請求需要驗證)
  • [ ] Rate Limiting(每分鐘最多 N 次請求)
  • [ ] JWT 驗證(檢查簽章、exp、iss)
  • [ ] CORS 設定(只允許需要的網域)
  • [ ] 日誌記錄(記錄所有錯誤但不暴露敏感資訊)
  • [ ] 依賴更新(定時執行 npm audit / pip audit)

課程總結

這堂 OWASP 安全課你從 Top 10、SQL Injection、XSS/CSP、CSRF 到安全 API 實作——你現在知道常見漏洞的原理和防護方式,可以寫出更安全的程式碼了。

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!