Gosec G 드라마 또는 Go에서 정수 변환 오버플로에 직면한 방법에 대해

WBOY
풀어 주다: 2024-09-10 08:30:32
원래의
891명이 탐색했습니다.

About the gosec G drama, or how I faced back integer conversion overflow in Go

Go는 강력한 형식의 언어이므로 실수를 방지합니다.

저는 Go가 정수 오버플로를 처리하고 있다고 잘못 가정하고 오류를 보고했습니다.

여기는 모든 것이 예상대로 이루어지는 완벽한 세상입니다

a := int64(42)
b := uint8(a)
fmt.Println(b) // 42
로그인 후 복사

그러면 다음 코드는 무엇을 할까요

a = 255 + 1    // 255 is the higher value an uint8 can reach
b = uint8(a)
fmt.Println(b) // ?

a = -1
b = uint8(a)
fmt.Println(b) // ?
로그인 후 복사

해결책은 다음과 같습니다

스포일러: 예상대로 작동하지 않거나 적어도 예상한 대로 작동하지 않습니다.

여기서 Go는 자동 변환을 수행합니다. 물론 제공된 정수 유형으로 값을 저장할 수는 없지만 오류는 전혀 없습니다.

결과가 있습니다: CWE-190

  • 식별자로 리소스에 액세스하지만 정수 유형을 다른 유형으로 변환해야 한다면 다른 리소스에 대한 액세스를 허용할 수도 있습니다.

이 때문에 Go의 보안 향상에 중점을 둔 린터인 gosec에서는 문제를 탐지하기 위한 린터인 린터 G115를 제공했습니다

G115 린터 아이디어는 좋았습니다.

그러나 불행하게도 몇 가지 잘못된 문제와 병합되어 몇 가지 문제를 제외하고 현재 해결되었습니다.

gosec v2.21.0이 golangci-lint에 병합된 후 문제가 심각해졌습니다

많은 사람들이 gosec G115를 비활성화했습니다. 이는 CI에 발생하는 오탐지와 노이즈로 인해 발생했습니다.

이제 많은 사람들이 안타깝게도 G115 검사기를 비활성화했기 때문에 GitHub에서 쉽게 볼 수 있습니다

위 내용은 Gosec G 드라마 또는 Go에서 정수 변환 오버플로에 직면한 방법에 대해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿