供應鏈防護要先建立依賴清冊,鎖定版本與來源、驗證完整性、隔離建置、縮小發布權限,並保留可重現與可回復的產物。
你部署的不只自己寫的程式
網站通常包含框架、套件、字型、圖示、CDN 腳本、建置工具、CI Action 與主機外掛。任何上游帳號被接管、套件遭植入、版本解析漂移或建置環境外洩,都可能進入最終產物。
第一步是列出直接與間接依賴、來源、版本、用途、負責人與替代方案。沒有清冊,就很難在公告漏洞或供應商事件時快速判斷影響。
固定版本與可信來源
應提交 lockfile,CI 使用可重現的安裝模式,避免每次建置自動取得不同相依版本。套件來源限制在官方 registry 或經管控的內部鏡像,防止名稱混淆與不明來源。
CDN 資源若無法本機託管,使用 Subresource Integrity 並固定版本,同時設定 CSP 精確來源。不要直接引用 latest、未版本化分支或可被遠端覆寫的檔案。
更新要快,但不能盲目自動上線
自動化工具可以提出更新與漏洞通知,但合併前仍要查看變更、維護者狀態、發布來源、權限需求與測試結果。高風險依賴採分階段更新,先在隔離環境建置與測試,再發布。
移除不再使用的套件與建置外掛能直接縮小攻擊面。不要因為「以前裝過」就永久保留高權限工具。
保護 CI/CD 與簽章
建置工作使用短效、最小權限憑證;拉取請求與不可信分支不得取得正式環境密鑰。第三方 CI Action 應固定到不可變 commit,並定期檢查維護狀態。
產物可建立 SHA-256 清單、來源資訊與簽章,發布時核對建置輸出與上傳檔案。密鑰不應寫進前端 bundle、環境範例、日誌或部署 ZIP。
把建置產物與內部資料分開
正式 ZIP 只包含執行需要的 HTML、CSS、JS、圖片、設定與公開政策。排除原始密鑰、備份、日誌、內部部署說明、驗證報告、套件快取與版本控制目錄。
發布前以全新目錄解壓產物,執行連結、雜湊、敏感字串與檔案類型檢查。不要直接把開發資料夾整包上傳。
事件發生時能快速回復
保存最近可信版本、相依清單與產物雜湊。發現上游遭入侵時,先停止發布、確認受影響版本與建置時間,再輪替可能接觸的憑證並重建產物;只回退套件版本不一定足夠。
修復後從乾淨環境重建,驗證網站、CSP、Service Worker 與快取是否取得新版本,並記錄決策與後續監控。
