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-namesOption 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/quxals extrahiert werden bar/quxin der Top - Level - Verzeichnis anstatt bar/quxim Stamm des Toplevel - Verzeichnis . GNU tar kümmert sich auch um symbolische Links, die außerhalb des Toplevel-Verzeichnisses verweisen, foo -> ../..und foo/barwird 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.