잘못된 정수 타입 변환

잘못된 정수 타입 변환

설명

큰 정수 값을 작은 정수 타입으로 바로 변환하면 값이 잘리거나 랩어라운드될 수 있습니다. 보안 관련 크기나 권한 값에 사용되면 검증 우회가 발생할 수 있습니다.

잠재적 영향

  • 제한 값이나 식별자가 의도하지 않은 값으로 변환될 수 있습니다.
  • 서비스 거부 또는 권한 검증 오류로 이어질 수 있습니다.

해결 방법

  • 필요한 비트 크기로 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는 범위 초과 시 경계값과 오류를 함께 반환하므로 오류를 무시하면 안 됩니다.

참조