Über das Gosec-G-Drama oder darüber, wie ich mit dem Integer-Konvertierungsüberlauf in Go konfrontiert wurde

WBOY
Freigeben: 2024-09-10 08:30:32
Original
890 Leute haben es durchsucht

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

Go ist eine stark typisierte Sprache, sie vermeidet Fehler.

Ich habe fälschlicherweise angenommen, dass Go Ganzzahlüberläufe verarbeitet, und einen Fehler gemeldet.

Hier ist die perfekte Welt, in der alles wie erwartet funktioniert

a := int64(42)
b := uint8(a)
fmt.Println(b) // 42
Nach dem Login kopieren

Was bedeutet also der folgende Code

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) // ?
Nach dem Login kopieren

Hier ist die Lösung

Spoiler: Es funktioniert nicht wie erwartet, oder zumindest nicht so, wie wir es erwarten könnten.

Hier führt Go also eine stille Konvertierung durch, natürlich kann der Wert nicht in den bereitgestellten Ganzzahltypen gespeichert werden, aber es liegt überhaupt kein Fehler vor.

Es gibt Konsequenzen: CWE-190

  • Stellen Sie sich vor, Sie greifen über ihre Kennung auf eine Ressource zu, müssen aber von einem Ganzzahltyp in einen anderen konvertieren. Möglicherweise erlauben Sie den Zugriff auf eine andere Ressource.

Aus diesem Grund hat gosec einen Linter zur Verfügung gestellt, der sich auf die Verbesserung der Sicherheit in Go konzentriert, um das Problem zu erkennen: den Linter G115

Die G115-Linter-Idee war gut.

Aber es wurde leider mit einigen falschen Problemen zusammengeführt, die jetzt behoben werden, bis auf ein paar.

Das Problem wird massiv, nachdem gosec v2.21.0 in golangci-lint integriert wurde

Viele Menschen deaktivierten Gosec G115 aufgrund der Fehlalarme und des Lärms, den es im CI verursachte

Jetzt haben leider viele Leute den G115-Checker deaktiviert, Sie können ihn leicht auf GitHub sehen

Das obige ist der detaillierte Inhalt vonÜber das Gosec-G-Drama oder darüber, wie ich mit dem Integer-Konvertierungsüberlauf in Go konfrontiert wurde. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage