教程:使用 VS Code Go 查找并修复易受攻击的依赖项

返回 Go 安全

您可以使用适用于 Visual Studio Code 的 Go 扩展直接在编辑器中扫描代码是否存在漏洞。

注意:有关下面图片中包含的漏洞修复的说明,请参阅 govulncheck 教程

先决条件

  • Go。我们建议使用最新版本的 Go 来学习本教程。有关安装说明,请参阅 安装 Go
  • VS Code,更新到最新版本。在此下载。您也可以使用 Vim(详见 此处),但本教程主要关注 VS Code Go。
  • VS Code Go 扩展,可 在此下载
  • 特定于编辑器的设置更改。您需要根据 这些规范 修改您的 IDE 设置,然后才能重现以下结果。

如何使用 VS Code Go 扫描漏洞

第 1 步。运行“Go: Toggle Vulncheck”

Toggle Vulncheck 命令显示模块中列出的所有依赖项的漏洞分析。要使用此命令,请在 IDE 中打开命令面板(Linux/Windows 上为 Ctrl+Shift+P,Mac OS 上为 Cmd+Shift+P),然后运行“Go: Toggle Vulncheck”。在您的 go.mod 文件中,您将看到代码中直接和间接使用的易受攻击依赖项的诊断信息。

Run Toggle Vulncheck

注意:要在您自己的编辑器中重现本教程,请将以下代码复制到您的 main.go 文件中。

// This program takes language tags as command-line
// arguments and parses them.

package main

import (
  "fmt"
  "os"

  "golang.org/x/text/language"
)

func main() {
  for _, arg := range os.Args[1:] {
    tag, err := language.Parse(arg)
    if err != nil {
      fmt.Printf("%s: error: %v\n", arg, err)
    } else if tag == language.Und {
      fmt.Printf("%s: undefined\n", arg)
    } else {
      fmt.Printf("%s: tag %s\n", arg, tag)
    }
  }
}

然后,确保程序对应的 go.mod 文件如下所示

module module1

go 1.18

require golang.org/x/text v0.3.5

现在,运行 go mod tidy 以确保您的 go.sum 文件已更新。

第 2 步。通过代码操作运行 govulncheck。

使用代码操作运行 govulncheck 允许您专注于代码中实际调用的依赖项。VS Code 中的代码操作用灯泡图标标记;将鼠标悬停在相关依赖项上以查看有关漏洞的信息,然后选择“Quick Fix”以显示选项菜单。其中,选择“run govulncheck to verify”。这将在您的终端中返回相关的 govulncheck 输出。

govulncheck code action
VS Code Go govulncheck output

第 3 步。将鼠标悬停在 go.mod 文件中列出的依赖项上。

有关特定依赖项的相关 govulncheck 输出也可以通过将鼠标悬停在 go.mod 文件中的依赖项上来找到。对于快速查看依赖项信息,此选项甚至比使用代码操作更有效。

Hover over dependency for vulnerability information

第 4 步。升级到依赖项的“fixed in”版本。

代码操作还可以用于快速升级到依赖项的漏洞已修复的版本。通过在代码操作下拉菜单中选择“Upgrade”选项来完成此操作。

Upgrade to Latest via code action menu

其他资源

  • 有关 IDE 中漏洞扫描的更多信息,请参阅此页面“注释和注意事项”部分特别讨论了漏洞扫描可能比上述示例更复杂的特殊情况。
  • Go 漏洞数据库除了 Go 包维护者直接向 Go 安全团队报告的信息外,还包含来自许多现有来源的信息。
  • 请参阅Go 漏洞管理页面,它提供了 Go 用于检测、报告和管理漏洞的架构的高级视图。