主要观点:
- 写 Go 代码时要牢记安全,可通过一些具体实践实现,包括保持对 Go 安全公告的了解、更新 Go 版本、测试代码安全性等。
关键信息: - 邮件列表:订阅 Go 邮件列表
[[email protected]](https://jarosz.dev/cdn-cgi/l/email-protection)以获取安全信息,所有包含安全修复的发布都会在此列表中宣布。 - 更新 Go 版本:保持项目中的 Go 版本为最新,可获取安全补丁并确保与新的依赖项兼容,但要注意可能出现的兼容性和依赖问题。
使用 Go 工具:
go vet:Go 的“原生”静态代码分析工具,可用于分析 Go 代码中的潜在问题,如语法错误等。staticcheck:第三方静态代码分析器,可帮助发现错误、检测性能问题并强制 Go 语言风格。golangci-lint:可运行所有的代码检查器,能提供代码改进建议,如避免不必要的字符串格式化等。
- 检测竞态条件:使用 Go 的
test工具并添加-race参数来运行测试,检测程序中的竞态条件,也可通过添加t.Parallel()来并行运行测试以增加检测并发问题的机会。 扫描源代码中的漏洞:
govulncheck:Go 团队开发的工具,可扫描代码库中的已知漏洞,可在本地安装或集成到 CI 管道中,扫描二进制文件时需指定-mode binary参数。gosec:静态代码分析器,可帮助发现不安全的代码结构,可在本地安装或作为 GitHub Action 在 CI 管道中运行。
- 模糊测试:一种特殊的自动化测试方法,可用于发现潜在的安全漏洞,如缓冲区溢出、SQL 注入等,将在后续教程中详细介绍。
重要细节: - 在使用
govulncheck扫描二进制文件时,需先更新go.mod文件中的 Go 版本并运行go mod tidy以获取最新的依赖项。 - 在使用
gosec时,可通过配置选项来调整其行为,具体细节暂未在本文中介绍。 - 大多数讨论的方法和测试技术都得到了OpenSSF基金会的鼓励,开源项目可通过满足相关标准获得最佳实践徽章。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。