gosec

最終更新:2020/05/07


1. gosecとは

gosecはソースコードのセキュリティ問題を検査します。

ある一定以上の規模のプロジェクトでは、なるべく利用するようにしましょう。

ここではこれまでに発生したことのあるセキュリティエラー、原因、修正方法について記載します。

G304 (CWE-22): Potential file inclusion via variable (Confidence: HIGH, Severity: MEDIUM)

上記のセキュリティエラーは、ioutil.ReadFileを呼び出している箇所で発生しました。

path, _ := filepath.Abs("../../../test/testdata/users.json") b, err := ioutil.ReadFile(path)

エラーの理由は

変数でファイルパスを指定すると、意図しないファイルパスを指定される危険性がある

からです。

以下のように修正します。

import ( "path/filepath" ) path, _ := filepath.Abs("../../../test/testdata/users.json") b, err := ioutil.ReadFile(filepath.Clean(path))

filepath.Clean関数を使用します。

これにより、安全なファイルパスを返すことが可能になります。