security-auditor
Security Auditor Skill
🧠 Expertise
資深資安專家,專精於應用程式安全、滲透測試與安全架構設計,熟悉 OWASP Top 10 與企業級安全規範。
1. OWASP Top 10 風險檢查
A01:2021 – Broken Access Control(存取控制失效)
檢查要點:
- 是否有水平/垂直越權風險
- 是否遵循最小權限原則
- API 端點是否有適當的權限驗證
紅旗標誌:
- ❌ 僅依賴前端隱藏功能來控制存取
- ❌ 缺少資源所有權驗證(IDOR 風險)
- ❌ CORS 配置過於寬鬆
A02:2021 – Cryptographic Failures(加密機制失效)
檢查要點:
- 敏感資料是否加密傳輸(TLS)
- 密碼是否使用強雜湊演算法(bcrypt、Argon2)
- 加密金鑰是否安全儲存
紅旗標誌:
- ❌ 使用 MD5/SHA1 進行密碼雜湊
- ❌ 硬編碼加密金鑰
- ❌ 未使用 HTTPS
A03:2021 – Injection(注入攻擊)
檢查要點:
- SQL 查詢是否參數化
- 是否過濾/跳脫用戶輸入
- 命令執行是否安全
紅旗標誌:
- ❌ SQL 字串拼接:
"SELECT * FROM users WHERE id = " + id - ❌ 直接執行用戶輸入的命令
- ❌ 未驗證的動態查詢建構
最佳實務:
// ❌ Bad
$query = "SELECT * FROM users WHERE id = " . $id;
// ✅ Good (Eloquent)
User::where('id', $id)->first();
// ✅ Good (Query Builder)
DB::table('users')->where('id', $id)->first();
A04:2021 – Insecure Design(不安全設計)
檢查要點:
- 是否有威脅建模
- 是否考慮失敗情境
- 業務邏輯是否有濫用風險
紅旗標誌:
- ❌ 無速率限制
- ❌ 缺少業務邏輯驗證
- ❌ 過度信任客戶端輸入
A05:2021 – Security Misconfiguration(安全配置錯誤)
檢查要點:
- 預設配置是否安全
- 是否禁用不必要的功能
- 錯誤訊息是否過於詳細
紅旗標誌:
- ❌ 生產環境開啟 Debug 模式
- ❌ 預設密碼/帳號未更改
- ❌ 不必要的 HTTP 方法啟用
A06:2021 – Vulnerable Components(易受攻擊的元件)
檢查要點:
- 相依套件是否有已知漏洞
- 是否定期更新相依
建議工具:
npm audit/composer audit- Snyk、Dependabot
A07:2021 – Authentication Failures(身份驗證失效)
檢查要點:
- 密碼政策是否足夠強
- 是否有帳號鎖定機制
- Session 管理是否安全
紅旗標誌:
- ❌ 允許弱密碼
- ❌ 無登入失敗次數限制
- ❌ Session ID 可預測
A08:2021 – Data Integrity Failures(資料完整性失效)
檢查要點:
- 是否驗證資料來源
- 是否使用數位簽章
紅旗標誌:
- ❌ 反序列化不受信任的資料
- ❌ 未驗證下載檔案完整性
A09:2021 – Logging Failures(日誌記錄失效)
檢查要點:
- 是否記錄安全相關事件
- 日誌是否包含敏感資訊
紅旗標誌:
- ❌ 未記錄登入失敗
- ❌ 日誌中包含密碼/Token
- ❌ 日誌可被竄改
A10:2021 – SSRF(伺服器端請求偽造)
檢查要點:
- 是否驗證外部 URL
- 是否限制可存取的協定/IP
紅旗標誌:
- ❌ 允許用戶指定任意 URL
- ❌ 可存取內部網路資源
2. 輸入驗證規範
驗證原則
- 白名單優於黑名單:定義允許的輸入,而非禁止的輸入
- 後端驗證必須:前端驗證僅為 UX,不可作為安全依賴
- 型別強制:使用強型別語言特性
常見驗證項目
| 輸入類型 | 驗證規則 |
|---|---|
| 格式驗證 + 長度限制 | |
| ID/Key | 格式驗證(UUID/數字)+ 存在性驗證 |
| 文字輸入 | 長度限制 + HTML 跳脫 |
| 檔案上傳 | MIME 類型 + 大小限制 + 副檔名驗證 |
| URL | 協定白名單 + 域名驗證 |
3. 敏感資料處理
敏感資料分類
| 等級 | 資料類型 | 處理要求 |
|---|---|---|
| 極高 | 密碼、API Key、加密金鑰 | 絕不明文儲存、傳輸加密、存取記錄 |
| 高 | PII(姓名、身分證、Email) | 加密儲存、最小化收集、存取控制 |
| 中 | 業務資料 | 傳輸加密、權限控制 |
處理規範
密碼處理:
// ✅ Correct
Hash::make($password); // Laravel 預設使用 bcrypt
// ❌ Wrong
md5($password);
sha1($password);
日誌脫敏:
// ❌ Wrong
Log::info('User login', ['password' => $password]);
// ✅ Correct
Log::info('User login', ['user_id' => $user->id]);
API 回應脫敏:
- Response 中不應包含密碼、Token、內部 ID
- 使用 Resource/Transformer 控制輸出欄位
4. 認證授權最佳實務
認證(Authentication)
| 項目 | 建議 |
|---|---|
| 密碼政策 | 最少 8 字元、包含大小寫數字 |
| 雜湊演算法 | bcrypt、Argon2 |
| Session 過期 | 閒置 30 分鐘、絕對 24 小時 |
| MFA | 高風險操作強制啟用 |
授權(Authorization)
| 項目 | 建議 |
|---|---|
| 原則 | 最小權限原則(Least Privilege) |
| 實作 | RBAC / ABAC |
| 驗證位置 | Controller 層 + Service 層雙重檢查 |
| 資源所有權 | 每次操作驗證資源歸屬 |
5. 審查評分標準
| 嚴重度 | 定義 | 範例 |
|---|---|---|
| 嚴重 | 可直接導致資料洩漏或系統被入侵 | SQL Injection、硬編碼密碼 |
| 高 | 可繞過安全機制 | 越權存取、Session 固定 |
| 中 | 增加攻擊面 | XSS、不安全配置 |
| 低 | 安全最佳實務偏離 | 日誌不完整、缺少 CSP |
More from changgenglu/changgenglu-blog
laravel-expert
Activates when user requests Laravel framework guidance, version migration, Eloquent patterns, middleware design, service container usage, or Laravel best practices. Do NOT use for generic PHP questions unrelated to the framework. Examples: 'How to use Service Container?', 'Translate this to Laravel 12'.
8pdf
Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text/tables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting/decrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.
1postman-mcp-integrator
提供使用 Postman MCP Server 進行 Collection、Request 管理的操作指南與故障排除。當需要透過代理人自動化維護 Postman 集合時觸發。
1mermaid-diagram
Activates ONLY when user explicitly requests Mermaid diagrams (e.g., 'use Mermaid', 'draw a Mermaid chart', 'create Mermaid sequence diagram'). Ensures GitLab 13.12.15 (Mermaid 8.9.x) compatibility, avoids known rendering pitfalls, and provides correct syntax patterns. Do NOT use for ASCII diagrams (use ascii-diagram-artist instead).
1line-notifier
Activates when user explicitly requests LINE notification, task completion summary, or status update via LINE. Do NOT use automatically; only trigger when user says 'notify me', 'send to LINE', or similar explicit requests.
1business-analyst
Activates when user requests requirements analysis, business process design, data analysis strategy, KPI definition, or business model analysis. Do NOT use for technical implementation details. Examples: 'Analyze user requirements', 'Define KPIs for success'.
1