Con GNU tar, es simplemente
tar -xvf untrusted_file.tar
en un directorio vacio GNU tar elimina automáticamente /
los nombres de los miembros principales cuando se extrae, a menos que explícitamente no se indique lo contrario con la --absolute-names
opción . GNU tar también detecta cuándo el uso de ../
haría que un archivo se extrajera fuera del directorio de nivel superior y coloca esos archivos en el directorio de nivel superior, por ejemplo, un componente foo/../../bar/qux
se extraerá como bar/qux
en el directorio de nivel superior bar/qux
en lugar del padre del directorio de nivel superior . GNU tar también se encarga de los enlaces simbólicos que apuntan fuera del directorio de nivel superior, por ejemplo, foo -> ../..
y foo/bar
no hará bar
que se extraiga fuera del directorio de nivel superior.
Tenga en cuenta que esto solo se aplica a (versiones suficientemente recientes de) GNU tar (así como a algunas otras implementaciones, por ejemplo, * BSD tar y BusyBox tar). Algunas otras implementaciones no tienen dicha protección.
Debido a los enlaces simbólicos, las protecciones que usa no serían suficientes: el archivo podría contener un enlace simbólico que apunta a un directorio fuera del árbol y extraer archivos en ese directorio. No hay forma de resolver ese problema basándose únicamente en los nombres de los miembros, debe examinar el objetivo de los enlaces simbólicos.
Tenga en cuenta que si está extrayendo en un directorio que ya contiene enlaces simbólicos, es posible que la garantía ya no se mantenga.