面向 Go 开发人员的安全最佳实践

返回 Go 安全性

此页面为 Go 开发人员提供了优先考虑其项目安全性的最佳实践。从使用模糊测试自动化测试到轻松检查竞争条件,这些提示可以帮助使您的代码库更安全、更可靠。

扫描源代码和二进制文件以查找漏洞

定期扫描代码和二进制文件以查找漏洞有助于及早识别潜在的安全风险。您可以使用 govulncheck(由 Go 漏洞数据库 提供支持)扫描您的代码以查找漏洞并分析哪些漏洞实际影响到您。使用 govulncheck 教程 开始。

Govulncheck 还可以集成到 CI/CD 流程中。Go 团队在 GitHub Marketplace 上提供 govulncheck 的 GitHub 操作。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 版本会预先发布到低容量邮件列表 [email protected]。如果您想了解 Go 本身的安全修复何时发布,请订阅。