Есть ли способ ограничить окончательный путь в каталоге specfi c для path.join или path.resolve в NodeJS? - PullRequest
0 голосов
/ 20 апреля 2020

TL; DR:

path.join('/my/directory', '../../not/my/directory')          // returns: /not/my/directory
path.resolve('/my/directory', '../../not/my/directory')       // returns: /not/my/directory
path.someFunction('/my/directory', '../../not/my/directory')  // shall return: /my/directory/not/my/directory or an error

Есть ли функция, которая может сделать это, или мне нужно написать ее самостоятельно?


Длинная версия:

В настоящее время я создаю приложение Electron. path.join() и path.resolve() - удобные инструменты для объединения путей. Но одна часть пути предоставляется пользователем.

Моя цель примерно такая: path.functionThatIAmNotAwareOf('/foo/bar', '../../user/provided/malicious/directory', 'baz.json') должен быть разрешен до /foo/bar/user/provided/malicious/directory/baz.json вместо /user/.../baz.json (что и делают соединения и решения)

Другими словами: я хочу путь вывода должен находиться в каталоге /foo/bar, независимо от того, что пользователь вводит. Вероятно, лучшая альтернатива будет, если функция выдаст ошибку.

К сожалению, path.join() позволяет пользователю экранирование первого каталога с .. и path.resolve() может быть экранировано ведущим sla sh (и ..).

Есть ли функция в модуле пути, которая делает это, или я должен написать свой собственный? Я имею в виду, это не сложно, но я бы удивился, если бы это не было обычным делом.

...