不適切な整数型変換

不適切な整数型変換

説明

大きな整数を小さい整数型へ直接変換すると、値が切り詰められたり折り返したりすることがあります。その値をセキュリティ上重要なサイズや権限の判断に使うと、検証を回避されるおそれがあります。

想定される影響

  • 制限値や識別子が意図しない値へ変わる可能性があります。
  • サービス拒否や認可の誤りにつながるおそれがあります。

対処方法

  • 必要なビット数を指定して strconv.ParseInt または strconv.ParseUint を呼び出し、エラーを確認してください。
  • 変換前に上限と下限を明示的に検査してください。

例

変更前

go
n, _ := strconv.ParseInt(value, 10, 64)
small := int32(n)

変更後

エラーを返す関数内の抜粋です。

go
n, err := strconv.ParseInt(value, 10, 32)
if err != nil {
    return err
}
small := int32(n)

説明:

  • 変更前: 大きい整数型として解析した値を小さい型へ変換すると、切り詰めや折り返しが発生する可能性があります。
  • 変更後: 32 ビットの範囲で解析し、エラーがあれば値を使いません。ParseInt は範囲外の入力に境界値とエラーを返すため、エラーを無視してはいけません。

参考資料