Prüfe vor dem Entpacken die Herkunft, einen vorhandenen erwarteten SHA-256-Wert, die Dateiliste, die Pfade und die unkomprimierte Gesamtgrösse. Eine lesbare ZIP-Datei ist noch kein sicherer oder passender Spielstand. Entpacke sie nach der Prüfung zuerst in einen leeren, getrennten Ordner auf deinem eigenen Rechner. Das verringert versehentliche Überschreibungen im Produktivverzeichnis; eine Pfadprüfung bleibt trotzdem nötig.
Original und Herkunft festhalten
Lass das heruntergeladene Archiv unverändert und notiere, von wem und wann du es erhalten hast. Wenn die Quelle einen SHA-256-Wert nennt, vergleiche ihn mit einem Wert aus einem vertrauenswürdigen, getrennten Kanal. Ohne bekannten Vergleichswert zeigt ein selbst berechneter Hash nur, welche konkrete Datei du vor dir hast; er bestätigt weder den Absender noch die Vertrauenswürdigkeit des Inhalts. Python stellt SHA-256 über hashlib bereit. Python: hashlib
import hashlib
archive = "server-backup.zip"
digest = hashlib.sha256()
with open(archive, "rb") as file:
for chunk in iter(lambda: file.read(1024 * 1024), b""):
digest.update(chunk)
print(digest.hexdigest(), archive)
Der nächste Befehl zeigt die Namen im Archiv, sofern dessen ZIP-Verzeichnis gelesen werden kann. Er entpackt nichts:
python3 -m zipfile -l server-backup.zip
Die ZIP-Spezifikation sieht relative Dateipfade mit / als Trennzeichen vor; Laufwerks- oder Gerätebuchstaben und ein führender Slash gehören nicht in einen gespeicherten Dateipfad. Python warnt davor, nicht geprüfte Archive zu entpacken, weil absolute Pfade oder ..-Bestandteile ausserhalb des gewählten Zielordners landen können. PKWARE ZIP File Format Specification · Python: zipfile
Pfade, oberste Ebene und Grösse prüfen
Eine Liste allein macht ungewöhnliche Pfade oder einen zusätzlichen Ordner nicht immer leicht erkennbar. Das folgende Beispiel liest nur die ZIP-Metadaten. Es zeigt die Dateianzahl, die aufsummierte unkomprimierte Grösse, die Einträge auf oberster Ebene und auffällige absolute oder übergeordnete Pfade. Es schreibt keine Archivdateien aus:
import stat
from pathlib import PurePosixPath, PureWindowsPath
from zipfile import ZipFile
archive = "server-backup.zip"
with ZipFile(archive) as zip_file:
entries = zip_file.infolist()
files = [item for item in entries if not item.filename.endswith("/")]
expanded = sum(item.file_size for item in files)
top_level = set()
unsafe = []
unix_flags = []
for item in entries:
raw = item.filename
posix = PurePosixPath(raw.replace("\\", "/"))
windows = PureWindowsPath(raw)
bad = (posix.is_absolute() or windows.is_absolute() or windows.drive
or ".." in posix.parts or ".." in windows.parts)
if bad:
unsafe.append(raw)
elif posix.parts:
top_level.add(posix.parts[0])
if item.create_system == 3:
mode = item.external_attr >> 16
flags = []
if stat.S_ISLNK(mode):
flags.append("Symlink")
if mode & 0o111:
flags.append("Ausführungsbit gesetzt")
if flags:
unix_flags.append((raw, ", ".join(flags)))
print("Einträge:", len(entries))
print("Unkomprimierte Dateidaten:", expanded, "Bytes")
print("Oberste Ebene:", sorted(top_level))
print("Auffällige Pfade:", unsafe)
print("Unix-Symlink-/Ausführungsmerkmale:", unix_flags)
for item in sorted(files, key=lambda entry: entry.file_size, reverse=True)[:10]:
print(item.file_size, "Bytes; komprimiert:", item.compress_size, "Bytes;", item.filename)
Die Zusatzliste liest nur Dateimetadaten. ZIP-Attribute hängen vom Betriebssystem ab, das das Archiv erstellt hat; die Anzeige erfasst daher Unix-Markierungen, aber keine ausführbaren Inhalte zuverlässig. Eine leere Liste beweist nicht, dass Dateien harmlos sind. Prüfe unbekannte Einträge und unerwartete Programm- oder Skriptdateien weiter, ohne sie zu starten.
Vergleiche die oberste Ebene mit dem Format, das dein Backup-Werkzeug erwartet. Ein zusätzlicher Ordner wie backup-2026/ kann bedeuten, dass der Spielstand eine Ebene tiefer liegt. Eine einzelne Datei direkt im Archivstamm kann dagegen auf einen anderen Inhalt oder ein unvollständiges Paket hindeuten. Entferne den Ordner nicht blind und verschiebe keine Dateien, bis klar ist, welche Struktur das Ziel erwartet.
Die aufsummierte file_size schätzt die Dateidaten nach dem Entpacken; sie sagt den tatsächlichen Speicherbedarf nicht exakt voraus und stammt aus dem Archiv selbst. Lege vor einem vollständigen CRC-Test und dem Entpacken eine eigene Obergrenze für Gesamtgrösse, grösste Einzeldatei und Eintragszahl fest. Richte sie nach dem erwarteten Backup und dem verfügbaren Speicher mit Reserve aus. Liegen die Archivangaben darüber oder ist der Umfang nicht plausibel, brich ab und kläre die Herkunft. Ein sehr grosses Verhältnis zwischen file_size und compress_size, eine unerwartet grosse Datei oder viele Einträge sind zusätzliche Gründe zur Prüfung. Es gibt keinen universellen sicheren Grenzwert; Metadaten sind keine harte Schranke gegen tatsächlich entstehende Daten. Python nennt fehlenden Speicher und sogenannte ZIP-Bomben ausdrücklich als Risiken beim Dekomprimieren. Führe die Sichtprüfung und den CRC-Test deshalb nicht auf dem aktiven Gameserver aus.
Lesbarkeit testen, ohne zu entpacken
python3 -m zipfile -t server-backup.zip prüft, ob Python das Archiv verarbeiten kann. Die zugrunde liegende ZipFile.testzip()-Methode liest alle Mitglieder und kontrolliert ihre CRC-Werte und Dateiköpfe; sie schreibt keine Dateien aus. CRC ist eine Fehlerprüfung des ZIP-Formats, kein kryptografischer Herkunftsnachweis. Ein erfolgreicher CRC-Test zeigt weder, wer das Archiv erstellt hat, noch ob sein Inhalt harmlos ist. Ein SHA-256-Treffer zeigt, dass die Datei zum separat vertrauenswürdig bezogenen Vergleichswert passt; er macht den Inhalt ebenfalls nicht sicher. Führe den CRC-Test erst aus, nachdem du Quelle, Umfang und die selbst gesetzte Grössengrenze geprüft hast, denn dabei werden die komprimierten Inhalte verarbeitet. Ein zurückgegebener Dateiname oder ein Lesefehler bedeutet: nicht überschreiben, das Original aufbewahren und beim vertrauenswürdigen Absender eine neue Kopie anfordern. Python: zipfile · Python: hashlib
Erst in einer getrennten Kopie entpacken
Wenn Herkunft, Struktur und Umfang zusammenpassen und ein vorhandener erwarteter SHA-256-Wert stimmt, entpacke in einen leeren Testordner ausserhalb des aktiven Serververzeichnisses. Der getrennte Ordner verringert versehentliche Dateikollisionen, ist aber keine Sandbox und begrenzt weder den Speicherverbrauch noch alle Risiken eines ungeprüften Archivs. Stelle genügend freien Platz bereit und führe keine unerwarteten Programme oder Skripte aus dem Archiv aus. Kontrolliere danach, ob die erwarteten Spielstände, Konfigurationsdateien und Erweiterungen wirklich vorhanden sind und ob die oberste Ordnerstruktur stimmt.
Vor einem echten Austausch braucht es eine aktuelle Sicherung des Zielservers, den in der Spiel- oder Panel-Dokumentation vorgesehenen Stopp und einen klaren Umfang: welche Daten ersetzt werden und welche erhalten bleiben. Entpacke nicht in die laufende Welt, nicht in das Produktionsverzeichnis und nicht über die einzige vorhandene Sicherung. Wenn Quelle, Ziel oder Ersetzungsverhalten unklar sind, kläre das zuerst. Die Minecraft-Backup-Anleitung erklärt Sicherung und Wiederherstellung; eine Gameserver-Testwiederherstellung prüft den Ablauf in einer getrennten Instanz. Für den Stopp vor Dateiänderungen siehe auch den Neustart-Ablauf.