☰ Mục lục series
Tài liệu Go tiếng Việt
  1. Bắt đầu (Getting started)
    1. Tổng quan
    2. Tải về và cài đặt
    3. Bắt đầu với Go
    4. Quản lý các bản cài đặt Go
    5. Plugin trình soạn thảo và IDE
  2. Dạo quanh Go (A Tour of Go)
    1. Chào mừng
    2. Package, biến và hàm
    3. Điều khiển luồng
    4. Struct, slice và map
    5. Method và interface
    6. Generics
    7. Xử lý đồng thời
  3. Hướng dẫn (Tutorials)
    1. Danh sách hướng dẫn
    2. Tạo một Go module
    3. Gọi mã của bạn từ một module khác
    4. Trả về và xử lý lỗi
    5. Trả về lời chào ngẫu nhiên
    6. Trả về lời chào cho nhiều người
    7. Thêm một test
    8. Biên dịch và cài đặt ứng dụng
    9. Kết luận
    10. Bắt đầu với workspace nhiều module
    11. Phát triển RESTful API với Go và Gin
    12. Truy cập cơ sở dữ liệu quan hệ
    13. Bắt đầu với generics
    14. Bắt đầu với fuzzing
    15. Làm việc với JSON
    16. Tìm và sửa các dependency có lỗ hổng với govulncheck
    17. Tìm và khắc phục phụ thuộc có lỗ hổng với VS Code Go
    18. Viết ứng dụng web
  4. Viết code Go
    1. Cách viết mã Go
    2. Effective Go
    3. Doc Comment trong Go
  5. Module
    1. Phát triển và publish module
    2. Quản lý phụ thuộc
    3. Tổ chức một module Go
    4. Quản lý mã nguồn của module
    5. Cách đánh số phiên bản module
    6. Quy trình phát hành và đánh phiên bản module
    7. Publish một module
    8. Phát triển một bản cập nhật major version
    9. Tham chiếu tệp go.mod
    10. Ngừng hỗ trợ 'go get' cho việc cài đặt tệp thực thi
  6. Cơ sở dữ liệu (Database)
    1. Truy cập cơ sở dữ liệu quan hệ
    2. Mở một handle cơ sở dữ liệu
    3. Thực thi câu lệnh SQL không trả về dữ liệu
    4. Truy vấn dữ liệu
    5. Dùng prepared statement
    6. Thực thi transaction
    7. Huỷ các thao tác đang chạy
    8. Quản lý kết nối
    9. Tránh rủi ro SQL injection
  7. Chẩn đoán và hiệu năng
    1. Chẩn đoán
    2. Hướng dẫn về Go Garbage Collector
    3. Tối ưu hoá dựa trên profile
    4. Data Race Detector
    5. Gỡ lỗi mã Go bằng GDB
    6. Hỗ trợ coverage profiling cho integration test
  8. Bảo mật (Security)
    1. Tổng quan bảo mật
    2. Thực hành tốt về bảo mật cho lập trình viên Go
    3. Quản lý lỗ hổng trong Go
    4. Cơ sở dữ liệu lỗ hổng của Go
    5. Quét lỗ hổng trong IDE
    6. Chính sách CNA của Go
    7. Go Fuzzing
    8. Chi tiết kỹ thuật của Go Fuzzing
    9. Chính sách bảo mật của Go
    10. Threat Model của Go
    11. Các quyết định về bảo mật của Go
    12. Tuân thủ FIPS 140-3
  9. Công cụ và toolchain
    1. Tài liệu về các lệnh
    2. Về lệnh go
    3. Go Toolchains
    4. Telemetry của Go
    5. Cài đặt Go từ mã nguồn
    6. Cài đặt và sử dụng gccgo
  10. Tham khảo
    1. Câu hỏi thường gặp (FAQ)
    2. Go 1 và tương lai của các chương trình Go
    3. Hướng dẫn chuyển đổi sang encoding/json/v2
    4. Hướng dẫn đóng góp
    5. Đóng góp cho frontend gccgo
  11. Phụ lục
    1. Bảng thuật ngữ
Hướng dẫn (Tutorials)

Hướng dẫn: Tìm và khắc phục phụ thuộc có lỗ hổng với VS Code Go

Bản dịch từ go.dev/doc/tutorial/govulncheck-ide

Quay lại Bảo mật Go

Bạn có thể quét lỗ hổng bảo mật cho mã của mình ngay trong trình soạn thảo bằng tiện ích mở rộng Go cho Visual Studio Code.

Lưu ý: để hiểu rõ cách khắc phục lỗ hổng xuất hiện trong các hình bên dưới, xem bài hướng dẫn govulncheck.

Yêu cầu trước khi bắt đầu:

  • Go. Chúng tôi khuyến nghị dùng phiên bản Go mới nhất để theo bài hướng dẫn này. Xem hướng dẫn cài đặt tại Cài đặt Go.
  • VS Code, đã cập nhật lên phiên bản mới nhất. Tải tại đây. Bạn cũng có thể dùng Vim (xem chi tiết tại đây), nhưng bài hướng dẫn này tập trung vào VS Code Go.
  • Tiện ích mở rộng VS Code Go, có thể tải tại đây.
  • Thay đổi thiết lập riêng cho trình soạn thảo. Bạn sẽ cần chỉnh thiết lập IDE theo các đặc tả này thì mới tái lập được kết quả bên dưới.

Cách quét lỗ hổng bằng VS Code Go

Bước 1. Chạy “Go: Toggle Vulncheck”

Lệnh Toggle Vulncheck hiển thị kết quả phân tích lỗ hổng cho toàn bộ các phụ thuộc được liệt kê trong module của bạn. Để dùng lệnh này, mở command palette trong IDE (Ctrl+Shift+P trên Linux/Windows hoặc Cmd+Shift+P trên Mac OS) rồi chạy “Go: Toggle Vulncheck.” Trong tệp go.mod, bạn sẽ thấy thông tin chẩn đoán về những phụ thuộc có lỗ hổng, cả những phụ thuộc được dùng trực tiếp lẫn gián tiếp trong mã của bạn.

Lệnh bật tắt Vulncheck trong VS Code Go

Lưu ý: Để tái lập bài hướng dẫn này trên trình soạn thảo của bạn, hãy chép đoạn mã dưới đây vào tệp main.go.

// This program takes language tags as command-line
// arguments and parses them.

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

Sau đó, hãy chắc chắn rằng tệp go.mod tương ứng của chương trình trông như thế này:

module module1

go 1.18

require golang.org/x/text v0.3.5

Bây giờ, chạy go mod tidy để bảo đảm tệp go.sum của bạn được cập nhật.

Bước 2. Chạy govulncheck thông qua code action.

Chạy govulncheck bằng code action cho phép bạn tập trung vào những phụ thuộc thực sự được gọi trong mã của mình. Code action trong VS Code được đánh dấu bằng biểu tượng bóng đèn; di chuột lên phụ thuộc tương ứng để xem thông tin về lỗ hổng, rồi chọn “Quick Fix” để hiện menu các tuỳ chọn. Trong đó, hãy chọn “run govulncheck to verify.” Thao tác này sẽ trả về phần đầu ra govulncheck tương ứng trong terminal của bạn.

Code action govulncheck trong tệp go.mod

Kết quả govulncheck hiển thị trong VS Code Go

Bước 3. Di chuột lên một phụ thuộc được liệt kê trong tệp go.mod.

Bạn cũng có thể xem phần đầu ra govulncheck về một phụ thuộc cụ thể bằng cách di chuột lên phụ thuộc đó trong tệp go.mod. Nếu chỉ cần liếc nhanh thông tin phụ thuộc, cách này thậm chí còn hiệu quả hơn dùng code action.

Rê chuột lên một dependency để xem thông tin lỗ hổng

Bước 4. Nâng cấp lên phiên bản “fixed in” của phụ thuộc.

Code action còn dùng được để nâng cấp nhanh lên phiên bản phụ thuộc đã khắc phục lỗ hổng. Hãy làm điều đó bằng cách chọn mục “Upgrade” trong menu thả xuống của code action.

Nâng lên phiên bản mới nhất qua menu code action

Tài nguyên bổ sung

  • Xem trang này để biết thêm thông tin về việc quét lỗ hổng trong IDE. Cụ thể, mục Ghi chú và lưu ý bàn về những trường hợp đặc biệt mà việc quét lỗ hổng có thể phức tạp hơn ví dụ ở trên.
  • Cơ sở dữ liệu lỗ hổng Go chứa thông tin từ nhiều nguồn sẵn có, bên cạnh các báo cáo trực tiếp từ những người bảo trì package Go gửi tới nhóm bảo mật Go.
  • Trang Quản lý lỗ hổng Go cung cấp cái nhìn tổng quan về kiến trúc của Go trong việc phát hiện, báo cáo và quản lý lỗ hổng.

Nội dung gốc: Go Documentation © The Go Authors, giấy phép CC BY 3.0. Bản dịch và ghi chú: Lê Văn Dũng.