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 중국어 웹사이트의 기타 관련 기사를 참조하세요!