Руководство: Поиск и устранение уязвимых зависимостей с помощью VS Code Go

Назад к безопасности Go

Вы можете сканировать свой код на наличие уязвимостей прямо из редактора с помощью расширения Go для Visual Studio Code.

Примечание: для объяснения исправления уязвимости, включенного в изображения ниже, см. руководство по govulncheck.

Предварительные требования:

  • Go. Рекомендуется использовать последнюю версию Go для выполнения этого руководства. Инструкции по установке см. в разделе Установка Go.
  • VS Code, обновлённая до последней версии. Скачать можно здесь. Также можно использовать Vim (подробности см. здесь), но это руководство сосредоточено на VS Code Go.
  • Расширение VS Code Go, которое можно скачать здесь.
  • Изменения настроек редактора. Перед тем как воспроизвести результаты, описанные ниже, необходимо изменить настройки вашей среды разработки согласно этим спецификациям.

Как сканировать код на наличие уязвимостей с помощью VS Code Go

Шаг 1. Выполните команду «Go: Toggle Vulncheck»

Команда Toggle Vulncheck отображает анализ уязвимостей для всех зависимостей, перечисленных в ваших модулях. Чтобы использовать эту команду, откройте палитру команд в вашей среде разработки (Ctrl+Shift+P на Linux/Windows или Cmd+Shift+P на macOS) и выполните команду «Go: Toggle Vulncheck». В файле go.mod вы увидите диагностические данные по уязвимым зависимостям, используемым как напрямую, так и косвенно в вашем коде.

Run Toggle Vulncheck

Примечание: чтобы воспроизвести это руководство в собственном редакторе, скопируйте приведённый ниже код в файл main.go.

<code>// Эта программа принимает теги языка в качестве аргументов командной строки
// и выполняет их разбор.

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)
    }
  }
}
</code>

Затем убедитесь, что соответствующий файл go.mod для программы выглядит следующим образом:

<code>module module1

go 1.18

require golang.org/x/text v0.3.5
</code>

Теперь выполните команду go mod tidy, чтобы убедиться, что ваш файл go.sum обновлён.

Шаг 2. Запустите govulncheck с помощью действия в коде.

Запуск govulncheck с помощью действия в коде позволяет сосредоточиться на зависимостях, которые действительно используются в вашем коде. Действия в VS Code обозначены значком лампочки; наведите курсор на соответствующую зависимость, чтобы увидеть информацию о уязвимости, а затем выберите «Быстрое исправление», чтобы отобразить меню с вариантами. Среди них выберите «запустить govulncheck для проверки». Это вернёт соответствующий вывод govulncheck в вашем терминале.

govulncheck code action
VS Code Go govulncheck output

Шаг 3. Наведите курсор на зависимость, перечисленную в вашем файле go.mod.

Соответствующий вывод govulncheck по конкретной зависимости также можно получить, наведя курсор на зависимость в файле go.mod. Для быстрого просмотра информации о зависимости этот способ ещё более эффективен, чем использование действия в коде.

Hover over dependency for vulnerability information

Шаг 4. Обновите зависимость до версии, в которой уязвимость исправлена.

Действия в коде также могут использоваться для быстрого обновления до версии зависимости, в которой уязвимость исправлена. Сделайте это, выбрав опцию «Обновить» в выпадающем меню действия в коде.

Upgrade to Latest via code action menu

Дополнительные ресурсы

  • См. эту страницу для получения дополнительной информации о сканировании уязвимостей в вашей среде разработки. В частности, раздел «Примечания и ограничения» обсуждает специальные случаи, когда сканирование уязвимостей может быть более сложным, чем в приведённом выше примере.
  • База данных уязвимостей Go содержит информацию из множества источников, а также прямые отчёты от авторов пакетов Go в команду безопасности Go.
  • См. страницу Управление уязвимостями Go, которая предоставляет высокоуровневый обзор архитектуры Go для обнаружения, сообщения и управления уязвимостями.
GoRu.dev Golang на русском

На сайте представлена адаптированная под русский язык документация языка программирования Golang