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

  • 識別子によってリソースにアクセスするが、整数型から別の整数型に変換する必要があると想像してください。別のリソースへのアクセスを許可することもできます。

このため、Gosec リンターは Go のセキュリティの向上に重点を置き、問題を検出するためのリンター G115 を提供しました

G115 リンターのアイデアは良かったです。

しかし、残念ながら、いくつかの誤った問題と統合されており、現在は一部を除いて解決されています。

gosec v2.21.0 が golangci-lint にマージされた後、問題は大規模になります

多くの人が gosec G115 を無効にしました。これは、CI に誤検知とノイズがもたらされていたためです

現在、多くの人が残念ながら G115 チェッカーを無効にしていますが、GitHub で簡単に確認できます

以上がGosec G ドラマについて、または Go で整数変換オーバーフローにどのように対処したかについての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート