教程:使用VS Code Go插件查找和修复可能有安全风险的依赖项

本文翻译自《Tutorial: Find and fix vulnerable dependencies with VS Code Go》。

点此回到《Go安全》

目录

先决条件

如何使用VS Code Go扫描漏洞

其他资源

你可以使用Visual Studio Code编辑器的Go插件直接在编辑器中扫描代码中的漏洞。

注意:有关以下图像中包含的漏洞修复相关的教程,请参阅govulcheck教程

先决条件

  • Go 1.18或更高版本。Govulncheck旨在与Go 1.18及以后的版本配合使用。有关安装说明,请参阅安装Go。我们建议你使用最新版本的Go来学习本教程。
  • VS Code编辑器,更新到最新版本。请在此处下载。你也可以使用Vim(有关详细信息,请参阅此处),但本教程的重点是VS Code Go插件。
  • VS Code Go插件,可以在这里下载。
  • VS Code编辑器特定设置更改。你需要根据这些规范修改VS Code的设置,然后才能复制下文的代码示例,运行后得到相应的结果。

如何使用VS Code Go扫描漏洞

第一步,运行“Go: Toggle Vulncheck”

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

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

// 这个程序从命令行获取一个或多个“语言标签(language tag)”参数,然后解析它们
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文件已更新。

第二步,运行govulcheck。

使用代码操作(code action)运行govulcheck可以让你专注于代码中实际调用的依赖项。VS Code中的代码操作由灯泡图标标记;将鼠标悬停在相关依赖项上以查看有关该漏洞的信息,然后选择“快速修复(Quick Fix)”以显示选项菜单。再选择“运行govulcheck进行验证(run govulncheck to verify)”。这将在你的终端中返回相关的govulceck输出。

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

将鼠标悬停在go.mod文件中的依赖项上,也可以找到关于此依赖项的govulcheck输出。为了快速查看依赖项相关信息,这种方式甚至比使用代码操作更高效。

第四步,把你的依赖项升级到修复后的版本。

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

其他资源

  • 有关IDE中漏洞扫描的详细信息,请参阅此页。特别是“注意和警告”小节讨论了漏洞扫描可能比上例中更复杂的特殊情况。
  • Go漏洞数据库包含来自许多现有源代码的信息,此外还有Go包维护人员向Go安全团队的直接报告。
  • 请参阅Go漏洞管理页面,该页面提供了Go用于检测、报告和管理漏洞的体系结构的高级视图。