Quét lỗ hổng bảo mật trong IDE
Các trình soạn thảo tích hợp với Go language server, chẳng hạn như VS Code với tiện ích mở rộng Go, có thể phát hiện lỗ hổng bảo mật trong các dependency của bạn.
Có hai chế độ để phát hiện lỗ hổng bảo mật trong các dependency. Cả hai đều được hỗ trợ bởi cơ sở dữ liệu lỗ hổng bảo mật Go và bổ sung cho nhau.
- Phân tích dựa trên import: ở chế độ này, các trình soạn thảo báo cáo lỗ hổng bảo mật bằng cách quét tập hợp các gói đượ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. Điều này nhanh, nhưng có thể báo cáo dương tính giả trong trường hợp mã của bạn import các gói chứa các ký hiệu dễ bị tấn công nhưng các hàm có lỗ hổng bảo mật không thể tiếp cận. Chế độ này có thể được bật bởi cài đặt gopls"vulncheck": "Imports". - Phân tích
Govulncheck: dựa trên công cụ dòng lệnhgovulncheck, được nhúng tronggopls. Điều 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 các hàm dễ bị tấn cô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 cách sử dụng hành động mã “Run govulncheck to verify” liên kết với các báo cáo chẩn đoán từ phân tích dựa trên Import, hoặc sử dụ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 cho từng trình soạn thảo
VS Code
Tiện ích mở rộng Go cung cấp tích hợp với gopls. Các cài đặt sau cần thiết để bật các tính năng quét lỗ hổng bảo mật:
"go.diagnostic.vulncheck": "Imports", // bật phân tích dựa trên import theo mặc định.
"gopls": {
"ui.codelenses": {
"run_govulncheck": true // code lens "Run govulncheck" trên tệp go.mod.
}
}
Lệnh “Go Toggle Vulncheck” có thể được sử dụng để bật và tắt phân tích dựa trên import cho workspace hiện tại.
Vim/NeoVim
Khi sử dụng coc.nvim, cài đặt sau sẽ bật phân tích dựa trên import.
{
"codeLens.enable": true,
"languageserver": {
"go": {
"command": "gopls",
...
"initializationOptions": {
"vulncheck": "Imports",
}
}
}
}
Lưu ý và Cảnh báo
- Tiện ích mở rộng không quét các gói riêng tư cũng không gửi bất kỳ thông tin nào về các module riêng tư. Tất cả phân tích được thực hiện bằng cách lấy danh sách các module dễ bị tấn công đã biết từ cơ sở dữ liệu lỗ hổng bảo mật Go và sau đó tính toán giao cắt cục bộ.
- Phân tích dựa trên import sử dụng danh sách các gói trong các module workspace, có thể khác với những gì bạn thấy từ các tệp
go.modnếugo.workhoặc modulereplace/excludeđược sử dụng. - Kết quả phân tích govulncheck có thể trở nên lỗi thời khi bạn sửa đổi mã hoặc cơ sở dữ liệu lỗ hổng bảo mật Go được cập nhật. Để vô hiệu hóa thủ công các kết quả phân tích, hãy sử dụng codelens
"Reset go.mod diagnostics"được hiển thị ở đầu tệpgo.mod. Nếu không, kết quả sẽ tự động bị vô hiệu hóa sau một giờ. - Các tính năng này hiện chưa báo cáo lỗ hổng bảo mật trong thư viện chuẩn hoặc toolchain. Chúng tôi vẫn đang điều tra UX về nơi hiển thị kết quả và cách giúp người dùng xử lý các vấn đề.