Mit GNU Tar ist es einfach
tar -xvf untrusted_file.tar
in einem leeren Verzeichnis. GNU tar entfernt /
beim Extrahieren automatisch die Namen der führenden Mitglieder, es sei denn, mit der --absolute-names
Option wird ausdrücklich nichts anderes angegeben . GNU Tar erkennt auch, wenn die Verwendung von../
einer Datei extrahiert außerhalb des Toplevel - Verzeichnis und legt die Dateien im Hauptverzeichnis verursachen würde , anstatt sein, zum Beispiel eine Komponente foo/../../bar/qux
als extrahiert werden bar/qux
in der Top - Level - Verzeichnis anstatt bar/qux
im Stamm des Toplevel - Verzeichnis . GNU tar kümmert sich auch um symbolische Links, die außerhalb des Toplevel-Verzeichnisses verweisen, foo -> ../..
und foo/bar
wird nicht dazu veranlasst bar
, außerhalb des Toplevel-Verzeichnisses extrahiert zu werden.
Beachten Sie, dass dies nur für (ausreichend aktuelle Versionen von) GNU tar gilt (sowie für einige andere Implementierungen, z. B. * BSD tar und BusyBox tar). Einige andere Implementierungen haben keinen solchen Schutz.
Aufgrund von symbolischen Links würden die von Ihnen verwendeten Schutzfunktionen nicht ausreichen: Das Archiv könnte einen symbolischen Link enthalten, der auf ein Verzeichnis außerhalb des Baums verweist, und Dateien in diesem Verzeichnis extrahieren. Es gibt keine Möglichkeit, dieses Problem allein anhand der Mitgliedsnamen zu lösen. Sie müssen das Ziel symbolischer Links untersuchen.
Beachten Sie, dass die Garantie möglicherweise nicht mehr gültig ist, wenn Sie in ein Verzeichnis extrahieren, das bereits symbolische Links enthält.