Wie kann ich Dateien in Go unter angemessener Fehlerbehandlung und Sicherheitsaspekten effizient entpacken?

Linda Hamilton
Freigeben: 2024-11-13 13:01:02
Original
450 Leute haben es durchsucht

How can I efficiently unzip files in Go with proper error handling and security considerations?

Dateien mühelos mit Go entpacken

Das Entpacken von Dateien in Go ist mit den richtigen Tools eine unkomplizierte Aufgabe. Das Zip-Paket in Go bietet eine bequeme Möglichkeit, Dateien aus ZIP-Archiven zu extrahieren.

Aktueller Code

Das bereitgestellte Code-Snippet initialisiert einen Zip-Reader und iteriert über die Dateien in das Archiv und extrahiert sie an das angegebene Ziel. Die verschachtelten Defer-Anweisungen können zu Problemen führen, wie von @Nick Craig-Wood festgestellt.

Verbesserte Lösung

Um dieses Problem zu beheben, wird ein Abschluss eingeführt, um die zu kapseln Dateiextraktion und Schreiblogik. Darüber hinaus wird den Close()-Aufrufen sowohl für den Zip-Reader als auch für die einzelnen Dateireader eine Fehlerbehandlung hinzugefügt:

func Unzip(src, dest string) error {
    r, err := zip.OpenReader(src)
    if err != nil {
        return err
    }
    defer func() {
        if err := r.Close(); err != nil {
            panic(err)
        }
    }()

    os.MkdirAll(dest, 0755)

    extractAndWriteFile := func(f *zip.File) error {
        rc, err := f.Open()
        if err != nil {
            return err
        }
        defer func() {
            if err := rc.Close(); err != nil {
                panic(err)
            }
        }()

        ... (Code for file extraction and writing goes here) ...

        return nil
    }

    for _, f := range r.File {
        err := extractAndWriteFile(f)
        if err != nil {
            return err
        }
    }

    return nil
}
Nach dem Login kopieren

Diese verbesserte Lösung erstellt das Zielverzeichnis, wenn es nicht existiert, und stellt eine ordnungsgemäße Fehlerbehandlung sicher für alle Dateideskriptoren und Schließungsbereinigung.

Zusätzliche Überlegungen

Der aktualisierte Code umfasst auch die ZipSlip-Erkennung, um Verzeichnisse zu verhindern Durchquerung und potenzielle Sicherheitsrisiken im Zusammenhang mit dem Extrahieren von Dateien außerhalb des angegebenen Zielpfads.

Das obige ist der detaillierte Inhalt vonWie kann ich Dateien in Go unter angemessener Fehlerbehandlung und Sicherheitsaspekten effizient entpacken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage