最終更新: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関数を使用します。
これにより、安全なファイルパスを返すことが可能になります。