Определенно возможно получить доступ к файлам за пределами /content/includes
, просто добавив ../
к пути slug.Вы можете использовать path.normalize
для обхода пути и удаления всех ../
, но это все равно даст вам путь, который может быть за пределами вашего предполагаемого каталога, поэтому вы можете использовать path.join
, чтобы убедиться, что ваш предполагаемый каталог находится в началепредполагаемого пути.
// remove all `../` from the start of the slug.
const relativeSlug = req.params.slug.replace(/^(\.\.\/)+/, '');
// normalize the path
const normalizedSlug = path.normalize(relativeSlug);
const file = path.join(__dirname + '/content/includes/', normalizedSlug);
Это поможет убедиться, что путь к слагу находится в вашем намеченном каталоге.
Процесс, выполняющий ваш сервер, должен также иметь ограниченный доступ к файловой системе, а небыть в состоянии прочитать много из других каталогов для начала.
Подробнее об этом здесь: https://www.owasp.org/index.php/Path_Traversal