编写安全的 Go 代码

主要观点:

  • 写 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基金会的鼓励,开源项目可通过满足相关标准获得最佳实践徽章。
阅读 15
0 条评论