Руководство: Поиск и устранение уязвимых зависимостей с помощью VS Code 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 вы увидите диагностические данные по уязвимым зависимостям, используемым как напрямую, так и косвенно в вашем коде.
Примечание: чтобы воспроизвести это руководство в собственном редакторе, скопируйте приведённый ниже код в файл 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 в вашем терминале.
Шаг 3. Наведите курсор на зависимость, перечисленную в вашем файле go.mod.
Соответствующий вывод govulncheck по конкретной зависимости также можно получить, наведя курсор на зависимость в файле go.mod. Для быстрого просмотра информации о зависимости этот способ ещё более эффективен, чем использование действия в коде.
Шаг 4. Обновите зависимость до версии, в которой уязвимость исправлена.
Действия в коде также могут использоваться для быстрого обновления до версии зависимости, в которой уязвимость исправлена. Сделайте это, выбрав опцию «Обновить» в выпадающем меню действия в коде.
Дополнительные ресурсы
- См. эту страницу для получения дополнительной информации о сканировании уязвимостей в вашей среде разработки. В частности, раздел «Примечания и ограничения» обсуждает специальные случаи, когда сканирование уязвимостей может быть более сложным, чем в приведённом выше примере.
- База данных уязвимостей Go содержит информацию из множества источников, а также прямые отчёты от авторов пакетов Go в команду безопасности Go.
- См. страницу Управление уязвимостями Go, которая предоставляет высокоуровневый обзор архитектуры Go для обнаружения, сообщения и управления уязвимостями.