claude-code/claude-zh/skills/springboot-security/SKILL.md

69 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: springboot-security
description: Spring Boot 安全性最佳實踐,涵蓋身份驗證/授權、輸入驗證、CSRF、秘密資訊管理、安全性標頭、速率限制及依賴項安全性。
---
# Spring Boot 安全性審核 (Spring Boot Security Review)
在添加驗證、處理輸入、建立端點或處理秘密資訊時,請遵循本技能。
## 何時啟用
- 實作身份驗證JWT、OAuth2、Session
- 實作授權(使用 `@PreAuthorize` 或基於角色的存取控制 RBAC
- 驗證使用者輸入Bean Validation
- 配置 CORS、CSRF 與安全標頭 (Security Headers)。
- 管理秘密資訊Secrets 管理)。
- 實作速率限制Rate Limiting與防止暴力破解。
- 掃描依賴項中的 CVE 漏洞。
## 身份驗證與授權
### 身份驗證 (Authentication)
- 優先使用無狀態的 **JWT** 或帶有撤銷清單的 **Opaque Tokens**
- 對於 Session 應使用 `httpOnly`, `Secure`, `SameSite=Strict` 的 Cookies。
- 透過 `OncePerRequestFilter` 驗證權杖。
### 授權 (Authorization)
- 開啟方法級別安全性:`@EnableMethodSecurity`。
- 使用 `@PreAuthorize("hasRole('ADMIN')")` 進行權限控管。
- **預設拒絕**:僅開放必要的 Scopes。
## 輸入驗證與防止注入
### 輸入驗證
- 在 Controller 使用 Bean Validation 標註 `@Valid`
- 在 DTO 上定義約束條件:`@NotBlank`, `@Email`, `@Size`
- **防止 XSS**:渲染前清理任何 HTML 內容。
### SQL 注入防範
- 使用 Spring Data JPA Repository。
- 原生查詢務必使用 `:param` 綁定,**嚴禁**字串拼接。
## 密碼安全性
- 務必使用 **BCrypt****Argon2** 對密碼進行雜湊處理,絕不儲存明文。
- 使用 `PasswordEncoder` 實例進行處理。
## 其他防禦機制
- **CSRF 護衛**:對於純 API (Bearer Token) 可停用 CSRF對於具備 Browser Session 的應用則必須啟用並處理 Token 傳輸。
- **秘密資訊管理**:金鑰/帳密嚴禁寫死在代碼或 `application.yml` 中,應透過環境變數或 Vault 載入。
- **安全性標頭**:配置 CSP, Frame-Options, XSS Protection 等標頭。
- **CORS 配置**:在安全過濾器層級配置,並嚴格限制 `allowedOrigins`**生產環境不得使用 `*`**。
- **依賴項安全**:定期運行 `npm audit` 或 OWASP 工具,並在 CI 流程中攔截已知 CVE 的佈署。
## 釋出前安全性檢查清單
- [ ] 權杖 (Token) 是否有正確驗證與過期機制?
- [ ] 所有敏感路徑是否均有授與檢查 (Authorization Guards)
- [ ] 是否所有輸入內容都經過驗證與清理?
- [ ] 查詢是否排除字串拼接 SQL
- [ ] 是否已將秘密資訊移至外部配置(並確認沒被提交到 Git
- [ ] 已正確配置安全標頭、CORS 與速率限制。
- [ ] 紀錄檔中是否確保無洩露任何敏感個資 (PII)
---
**核心原則**:預設拒絕、全面驗證、最小權限原則,並優先透過框架配置實現安全性。