Привет, пишу что-то вроде хранилища, в котором можно создавать файлы. Хранилище - это пока обычный каталог. Пытаюсь сделать проверку того, что путь к создаваемому файлу не вылазит за пределы каталога:
import pathlib
storage = pathlib.Path('/tmp/storage')
newfile = pathlib.Path('../../etc/passwd')
def add_file(storage, newfile):
fullpath = storage.joinpath(newfile).resolve()
if not storage in fullpath.parents():
raise ValueError('{} is not inside {}', newfile, storage)
...
Проблема в том, что Path.resolve()
не работает для файлов, которые ещё не существуют:
>>> add_file(storage, pathlib.Path('README'))
OSError: [Errno 2] No such file or directory: '/tmp/storage/README'
Как же блин безопасно проверить, что файл находится в пределах указанного каталога?