若發現安全漏洞(如 HashKey/HashIV 洩漏風險、加密實作缺陷、timing attack 弱點),請不要在公開 Issues 中提交。
請透過 GitHub Issues 或以下方式回報:
- GitHub:提交 Security Issue
- 主旨格式:
[Security] ECPay API Skill 安全漏洞通報 - 內容建議包含:漏洞描述、影響範圍、重現步驟、建議修復方式(如有)
| 階段 | 時間 |
|---|---|
| 確認收到 | 1-2 個工作天 |
| 初步評估 | 3-5 個工作天 |
| CRITICAL 級別修復 | 24 小時內 |
| HIGH 級別修復 | 7 個工作天內 |
| MEDIUM 級別修復 | 30 個工作天內 |
| LOW 級別修復 | 下一次計畫性發布 |
本安全政策涵蓋以下內容的安全漏洞:
guides/13(12 語言 CheckMacValue 實作)、guides/14(12 語言 AES 加密實作)SKILL.md/SKILL_OPENAI.md中的安全規則與決策樹scripts/SDK_PHP/官方 PHP SDK 範例test-vectors/加密測試向量guides/中的程式碼範例(所有語言)
ECPay 平台本身的漏洞(API 伺服器、金流系統、商店後台等),請透過 techsupport@ecpay.com.tw 通報。
我們遵循負責任揭露原則:
- 請勿公開揭露:在修復完成前,請勿在公開場合(Issues、社群媒體、部落格)揭露漏洞細節
- 協同修復:我們會與通報者合作確認問題並開發修復方案
- 致謝:經確認的漏洞,通報者將列入致謝名單(除非通報者要求匿名)
- 揭露時間表:漏洞修復完成後,我們將在 90 天內(或與通報者協議的更早時間)協調公開揭露細節
本 repo 所有出現的 HashKey、HashIV、MerchantID 與測試信用卡號,皆為 ECPay 官方公開的測試帳號,僅供開發與驗證使用。
- ❌ 絕對不要 在 PR 中提交真實的商店 MerchantID、HashKey 或 HashIV
- ❌ 絕對不要 提交
.env檔案或含有真實憑證的設定檔 - ✅ 範例程式碼一律使用官方測試帳號(見
SKILL.md測試帳號表) - ✅ 環境變數載入範例使用
process.env.ECPAY_HASH_KEY等 placeholder 形式
所有加密驗證程式碼必須使用 timing-safe 比較函式,禁止使用 == 或 ===:
| 語言 | 函式 |
|---|---|
| PHP | hash_equals() |
| Python | hmac.compare_digest() |
| Node.js | crypto.timingSafeEqual() |
| TypeScript | crypto.timingSafeEqual() |
| Go | subtle.ConstantTimeCompare() |
| Java | MessageDigest.isEqual() |
| Kotlin | MessageDigest.isEqual() |
| C# | CryptographicOperations.FixedTimeEquals() |
| C | CRYPTO_memcmp() (OpenSSL) |
| C++ | CRYPTO_memcmp() (OpenSSL) |
| Rust | subtle::ConstantTimeEq |
| Swift | HMAC<SHA256>.isValidAuthenticationCode() |
| Ruby | OpenSSL.secure_compare() |
⚠️ .env僅適用於本機開發。將含有真實 HashKey / HashIV 的.env檔案部署到生產伺服器是常見的密鑰洩漏場景。
| 環境 | 推薦方案 |
|---|---|
| AWS | AWS Secrets Manager 或 AWS Parameter Store(免費方案) |
| GCP | Google Cloud Secret Manager |
| Azure | Azure Key Vault |
| Vercel / Netlify | 平台內建 Environment Variables(加密儲存,不可在 UI 查看) |
| Docker / K8s | Kubernetes Secrets 或 HashiCorp Vault |
| 自架伺服器 | 作業系統環境變數(由 systemd / supervisor 注入,不寫入磁碟) |
- ❌ 不將
.env檔案提交到 git(echo '.env' >> .gitignore) - ❌ 不將
.env檔案複製到生產伺服器 - ❌ 不在 CI/CD logs 中
echo或printHashKey / HashIV - ✅ 每個環境(開發、測試、正式)使用各自獨立的 HashKey / HashIV
- ✅ 定期輪換密鑰,並確認舊密鑰失效後無遺漏的呼叫點
- ✅ 正式環境只讀取環境變數或密鑰管理服務,不從檔案讀取明文密鑰