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 (и ..
).
Есть ли функция в модуле пути, которая делает это, или я должен написать свой собственный? Я имею в виду, это не сложно, но я бы удивился, если бы это не было обычным делом.