Go 開發者的安全最佳實踐
本頁面為 Go 開發者提供有關如何優先考慮專案安全的最佳實踐。從使用模糊測試(fuzzing)自動化測試到輕鬆檢查競態條件,這些技巧都能幫助您的程式碼庫更安全、更可靠。
掃描原始碼和二進位制檔案中的漏洞
定期掃描您的程式碼和二進位制檔案中的漏洞有助於及早發現潛在的安全風險。您可以利用由 Go 漏洞資料庫 支援的 govulncheck 來掃描程式碼中的漏洞,並分析哪些漏洞確實會影響您。請透過 govulncheck 教程 入門。
Govulncheck 也可以整合到 CI/CD 流程中。Go 團隊在 GitHub Marketplace 上提供了 govulncheck 的 GitHub Action。Govulncheck 還支援 -json
標誌,以幫助開發者將漏洞掃描與其他 CI/CD 系統整合。
您還可以透過使用 Visual Studio Code 的 Go 擴充套件 直接在程式碼編輯器中掃描漏洞。請透過 本教程 入門。
保持 Go 版本和依賴項的更新
保持您的 Go 版本更新 可以讓您獲得最新的語言功能、效能改進以及已知安全漏洞的補丁。更新的 Go 版本還能確保與新版依賴項的相容性,從而避免潛在的整合問題。請查閱 Go 版本歷史記錄,瞭解版本之間進行的更改。Go 團隊會在釋出週期中釋出小版本更新,以修復安全漏洞。請務必更新到最新的次要 Go 版本,以確保您擁有最新的安全修復。
保持第三方依賴項的更新對於軟體安全、效能和符合 Go 生態系統中的最新標準至關重要。然而,在未經徹底審查的情況下更新到最新版本 也可能存在風險,可能引入新的 bug、不相容的更改,甚至惡意程式碼。因此,雖然更新依賴項以獲取最新的安全補丁和改進至關重要,但每次更新都應經過仔細審查和測試。
使用模糊測試(fuzzing)來發現邊界情況下的利用
模糊測試(Fuzzing) 是一種自動化測試,它利用覆蓋率引導來操縱隨機輸入並遍歷程式碼,以發現和報告潛在的漏洞,例如 SQL 注入、緩衝區溢位、拒絕服務和跨站指令碼攻擊。模糊測試通常可以觸及程式設計師忽略或認為不太可能發生的邊界情況。請透過 本教程 入門。
使用 Go 的競態檢測器來檢查競態條件
當兩個或多個 goroutine 同時訪問同一資源,並且至少其中一個訪問是寫入操作時,就會發生競態條件。這可能導致軟體中出現不可預測且難以診斷的問題。使用內建的 競態檢測器 來識別 Go 程式碼中潛在的競態條件,這有助於確保併發程式的安全性和可靠性。請注意,競態檢測器在執行時發現競態,因此它不會發現未執行的程式碼路徑中的競態。
要使用競態檢測器,請在執行測試或構建應用程式時新增 -race
標誌,例如 go test -race
。這將使用啟用競態檢測器的模式編譯您的程式碼,並在執行時報告檢測到的任何競態條件。當競態檢測器發現程式中的資料競爭時,它將 列印一份報告,其中包含衝突訪問的堆疊跟蹤,以及參與的 goroutine 的建立堆疊。
使用 Vet 檢查可疑的結構
Go 的 vet 命令 旨在分析您的原始碼並標記可能不會導致語法錯誤,但在執行時可能引起問題的潛在問題。這些問題包括可疑的構造,例如不可達程式碼、未使用的變數以及 goroutine 相關的常見錯誤。透過在開發過程早期捕獲這些問題,go vet 有助於提高程式碼質量、減少除錯時間並增強整體軟體的可靠性。要為指定專案執行 go vet,請執行:
go vet ./...
訂閱 golang-announce 以獲取安全釋出通知
包含安全修復的 Go 版本將預先通知低流量郵件列表 golang-announce@googlegroups.com。如果您想知道 Go 本身的安全修復何時到來,請訂閱。