Vibe Coder

上線前資安審查:合規清單與自動化掃描工具

上線前資安審查要涵蓋個資合規、認證授權、程式與設定三大類,共十多個檢查項目,並搭配 pip-audit、npm audit、bandit、trufflehog 等自動化掃描工具找出套件漏洞與洩漏的 Secret。有了固定 Checklist,每次上線新功能都能照標準流程走,不用靠記憶。
上線前資安審查:合規清單與自動化掃描工具

上線前資安審查:合規清單與自動化掃描工具

學了個資法、OWASP、Secret 管理之後,最容易漏掉的一步,是把這些零散的知識收斂成一份能重複執行的 Checklist。上線後才發現問題,要在有使用者的情況下修,壓力和風險都遠高於上線前。

這篇把上線前該檢查的項目整理成一份完整清單,並介紹幾個能自動找出漏洞的掃描工具,讓資安審查變成一個有標準流程、不靠記憶的固定動作。

你將學到什麼

上線前完整 Checklist

個資合規、認證授權、程式與設定三大類,一次列齊。

自動化掃描工具

pip-audit、npm audit、bandit、trufflehog 怎麼用。

第三方套件的風險

鎖版本、定期更新、防 Typosquatting 的好習慣。

資安事件怎麼應對

偵測、遏制、調查、修復和通報四步驟。

上線前資安 Checklist

個資與合規認證與授權程式與設定自動化掃描四項全部通過正式上線
四道關卡全部打勾,才輪到按下上線。

個資與合規

  • 有隱私權政策頁面,包含蒐集目的和使用者權利。
  • 同意勾選框預設未勾選,未勾選無法送出。
  • 不必要的欄位已移除(最小蒐集)。

認證與授權

  • 密碼用 bcrypt hash,不是 MD5 或明文。
  • JWT 有過期時間,Secret 是隨機強字串。
  • 每個 API 都有驗證 resource owner。
  • 登入 API 有 Rate Limit。

程式與設定

  • SQL 用 ORM 或 parameterized query。
  • API 回傳只有必要欄位,無敏感資訊。
  • 所有 Secret 在環境變數,不在程式碼。
  • 正式環境強制 HTTPS。
  • CORS 設定白名單,不是萬用符號。
  • Log 不記錄密碼、API Key 或個資。
  • 第三方套件無已知高危漏洞。

自動化資安掃描工具

工具用途使用方式
pip-audit掃描 Python 套件的已知漏洞pip-audit,輸出有漏洞的套件和 CVE
npm audit掃描 Node.js 套件漏洞npm audit,內建不需要安裝
bandit靜態分析 Python 程式碼的安全問題bandit -r .,掃描整個專案
trufflehog掃描 git history 裡有沒有洩漏的 Secrettrufflehog git file://.
GitHub Secret Scanning自動掃描 push 到 GitHub 的 commit在 repo Settings 開啟,免費功能

Dependency 安全性

第三方套件是常見的攻擊入口,有幾個好習慣:

  • 只安裝需要的套件:每個套件都是潛在的攻擊面,不用就不裝。
  • 鎖定版本:用 requirements.txt 或 package-lock.json 鎖定版本,避免自動升級引入問題。
  • 定期更新:定期執行 pip-audit 和 npm audit,發現高危漏洞立刻更新。
  • 確認套件來源:安裝前確認是官方或知名的套件,不要裝拼字相似的假套件(Typosquatting)。

設定錯誤的常見陷阱

陷阱問題正確設定
Debug 模式上線顯示詳細錯誤和 Stack TraceDEBUG=False 在正式環境
CORS 允許所有網域任何網站都能呼叫你的 API設定具體的 Origin 白名單
Supabase RLS 未開啟所有使用者能讀取彼此的資料每個 table 都要啟用 RLS 並設 policy
預設的 admin 帳號用預設密碼就能登入管理後台上線前修改或停用所有預設帳號
開發用的 endpoint 上線測試用的 API 暴露在正式環境用環境變數控制,正式環境不開啟
不必要開放的 port資料庫的 5432 port 對外開放資料庫只允許應用程式的 IP 連線

資安事件應對基礎

  1. 偵測:設好監控和警報,能在第一時間知道有異常(費用突增、錯誤率上升、異常登入)。
  2. 遏制:立刻隔離受影響的系統,撤銷洩漏的 Key,封鎖異常 IP。
  3. 調查:透過 Log 找出事件的時間線、影響範圍和根本原因。
  4. 修復和通報:修補漏洞,如有個資外洩依法通報(台灣個資法 72 小時、GDPR 72 小時)。
把 Checklist 整合到日常開發流程不要等到上線前才做資安 Review:寫新功能時問 AI「這個功能有什麼資安考量」,Code Review 時用「程式與設定」部分過一遍,每週跑一次 pip-audit 或 npm audit,每月檢查各服務的存取 Log。

延伸學習

把這篇文章分享給需要的人FacebookLINEThreadsX

常見問答

上線前資安 Checklist 大概要花多久?
把 5-1 節的完整流程走一遍,程式碼審查、Secret 掃描、套件漏洞、設定確認、個資合規加起來大約 45 分鐘,比起上線後出事再處理,這個時間非常划算。
pip-audit 和 bandit 差在哪?
pip-audit 掃描的是第三方套件本身有沒有已知漏洞(CVE),bandit 則是靜態分析你自己寫的 Python 程式碼有沒有常見的安全問題,兩者檢查的對象不同,建議都跑。
Supabase 的 RLS 預設是開的嗎?
不是,Supabase 的磁碟加密和傳輸 HTTPS 是自動啟用的,但 Row Level Security 需要手動對每個 table 開啟並設定 policy,沒開的話任何拿到 API Key 的人都能讀取全部資料。
發生資安事件時第一步該做什麼?
第一步是偵測,靠監控和警報在第一時間發現異常,接著立刻遏制,也就是隔離受影響系統、撤銷洩漏的 Key、封鎖異常 IP,之後才是調查根本原因與修復通報。