Các trình soạn thảo được tích hợp với Go language server, chẳng hạn VS Code với extension Go, có thể phát hiện lỗ hổng trong các phụ thuộc của bạn.
Có hai chế độ phát hiện lỗ hổng trong phụ thuộc. Cả hai đều được hậu thuẫn bởi vulnerability database của Go và bổ trợ cho nhau.
- Phân tích dựa trên import: ở chế độ này, trình soạn thảo báo cáo lỗ hổng bằng cách quét tập các package được import trong workspace, và hiển thị kết quả dưới dạng chẩn đoán trong các tệp
go.mod. Cách này nhanh, nhưng có thể báo dương tính giả trong trường hợp mã của bạn import các package chứa symbol có lỗ hổng nhưng các hàm chứa lỗ hổng lại không thể tới được. Chế độ này có thể bật bằng thiết lập gopls"vulncheck": "Imports". - Phân tích bằng
Govulncheck: dựa trên công cụ dòng lệnhgovulncheck, vốn được nhúng tronggopls. Cách này cung cấp một cơ chế ít nhiễu, đáng tin cậy để xác nhận xem mã của bạn có thực sự gọi tới các hàm có lỗ hổng hay không. Vì phân tích này có thể tốn kém để tính toán, nó phải được kích hoạt thủ công bằng code action “Run govulncheck to verify” đi kèm các báo cáo chẩn đoán từ phân tích dựa trên import, hoặc bằng code lens"codelenses.run_govulncheck"trên các tệpgo.mod.

Go: Toggle Vulncheck (vulncheck.mp4)
Các tính năng này có sẵn trong gopls v0.11.0 trở lên. Hãy chia sẻ phản hồi của bạn tại go.dev/s/vsc-vulncheck-feedback.
Hướng dẫn riêng theo từng trình soạn thảo
VS Code
Extension Go cung cấp phần tích hợp với gopls. Cần các thiết lập sau để bật các tính năng quét lỗ hổng:
"go.diagnostic.vulncheck": "Imports", // enable the imports-based analysis by default.
"gopls": {
"ui.codelenses": {
"run_govulncheck": true // "Run govulncheck" code lens on go.mod file.
}
}
Câu lệnh “Go Toggle Vulncheck” có thể dùng để bật/tắt phân tích dựa trên import cho workspace hiện tại.
Vim/NeoVim
Khi dùng coc.nvim, thiết lập sau sẽ bật phân tích dựa trên import.
{
"codeLens.enable": true,
"languageserver": {
"go": {
"command": "gopls",
...
"initializationOptions": {
"vulncheck": "Imports",
}
}
}
}
Ghi chú và lưu ý
- Extension không quét các package riêng tư và cũng không gửi bất kỳ thông tin nào về các module riêng tư. Toàn bộ phân tích được thực hiện bằng cách tải về danh sách các module đã biết là có lỗ hổng từ vulnerability database của Go rồi tính phần giao ở máy cục bộ.
- Phân tích dựa trên import sử dụng danh sách các package trong các module của workspace, danh sách này có thể khác với những gì bạn thấy trong các tệp
go.modnếu có dùnggo.workhoặcreplace/excludecủa module. - Kết quả phân tích govulncheck có thể trở nên cũ khi bạn sửa mã hoặc khi vulnerability database của Go được cập nhật. Để vô hiệu hoá kết quả phân tích một cách thủ công, hãy dùng codelens
"Reset go.mod diagnostics"hiển thị ở đầu tệpgo.mod. Nếu không, kết quả sẽ tự động bị vô hiệu hoá sau một giờ. - Hiện các tính năng này chưa báo cáo lỗ hổng trong thư viện chuẩn hay trong toolchain. Chúng tôi vẫn đang tìm hiểu về trải nghiệm người dùng: nên hiển thị kết quả ở đâu và giúp người dùng xử lý các vấn đề đó ra sao.