Go 開發人員的安全最佳實務

返回 Go 安全性

此頁面提供 Go 開發人員優先考慮其專案安全性的最佳實務。從自動化模糊測試到輕鬆檢查競爭條件,這些提示可幫助讓您的程式碼庫更安全且更可靠。

掃描原始碼和二進位檔中的漏洞

定期掃描您的程式碼和二進位檔中的漏洞有助於及早找出潛在的安全風險。您可以使用 govulncheck(由 Go 漏洞資料庫 支援)掃描您的程式碼中的漏洞,並分析哪些漏洞實際上會影響您。使用 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 版本,以確保您擁有最新的安全性修正。

維持最新的第三方依賴關係對於軟體安全性、效能以及符合 Go 生態系統中最新標準也至關重要。然而,在未徹底檢閱的情況下更新至最新版本也可能具有風險,可能會引入新的錯誤、不相容的變更,甚至惡意程式碼。因此,儘管更新依賴關係以取得最新的安全性修補程式和改進至關重要,但應仔細檢閱並測試每個更新。

透過模糊測試來揭露邊界情況漏洞

模糊測試是一種自動化測試,它使用涵蓋率引導來處理隨機輸入,並逐步執行程式碼以尋找和報告潛在的漏洞,例如 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 本身的安全性修正何時會推出,請訂閱。