0
2

More than 1 year has passed since last update.

【忙しい人のための】 Security Best Practices for Go Developers

Last updated at Posted at 2023-07-15

あなたのGoで書かれたプロジェクトはgo.devが提唱するセキュリティベストプラクティスに従っていますか?
実は、GoのチームはGo開発者のためのセキュリティベストプラクティスを公開しています。

これ↓

一次情報を読むことをお勧めしますが、英語が苦手な人や、サクッと概要だけ見たい忙しい人も多いと思います。

そんなあなたのために、心優しい私が要約しましたので活用してください。

ソースやバイナリに脆弱性スキャンをする

Goのバージョンと依存関係を最新に保つ

  • Goのバージョンは最新に保つ
    • 新しいバージョンにすることで、新機能、セキュリティパッチ、そしてパフォーマンスの向上などの恩恵を得ることができる
    • 依存関係の新しいバージョンとの互換性も保証され、潜在的な統合に関する問題を回避できる
    • Release Historyを確認してバージョン間でどのような変更があったかを評価するのが良い
    • マイナーバージョンの更新もした方が良い
  • サードパーティーパッケージも最新状態に更新する
    • ただし、更新する前には精査とテストを
      • 新たなバグ、悪意のあるコード、非互換な変更などのリスクがある

ファジングテストでエッジケースの脆弱性を発見する

  • Fuzzingを使う
    • ファジングテストはプログラマが見逃したり、そもそもテストが難しいようなエッジケースのテストをしてくれるため、脆弱性の検知の役にたつ

race detectorを使って競合状態をチェックする

  • 競合状態(race condition)は2つ以上のgoroutineが同時に同じリソースにアクセスして、そのリソースに対する書き込みがあった場合に起こる
    • ビルトインのrace detectorを使うことで潜在的な競合状態を検知することができる
      • (ただし、実行されないコード内の競合は検知できない)
    • ビルドやテストを実行するときに--raceフラグを加えることで race detector を使うことができる
      • e.g. go test -race

Vet を使用して怪しい構造を検査する

  • Goのvetコマンドを使ってソースコードの静的解析をする
    • コンパイルは通るが、潜在的な問題を抱えているコードを検知することができる
      • e.g. 到達しないコード、未使用の変数、goroutine関連のよくある間違い
    • go vet ./...で実行できる

golang-announce を購読してセキュリティリリースの通知を受け取る

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2