☰ 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ữ
Bảo mật (Security)

Quét lỗ hổng trong IDE

Bản dịch từ go.dev/doc/security/vuln/editor

Quay lại Go Security

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ệnh govulncheck, vốn được nhúng trong gopls. 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ệp go.mod.

Ảnh động VS Code Go chạy govulncheck và hiển thị lỗ hổng ngay trong editor

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.mod nếu có dùng go.work hoặc replace/exclude củ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ệp go.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.

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.