#javascript #node.js #security
#javascript #node.js #Безопасность
Вопрос:
У меня есть node.js приложение, предоставляющее API для удаления изображений из каталога ресурсов.
Таким образом, пользователь может выполнить DELETE
запрос и отправить указанное изображение на удаление, вот как оно обрабатывается в настоящее время:
const assetsPath = '/assets'
deleteFile(file: string) {
fs.unlink(`${assetsPath}/${file}`, (err) => {})
}
Проблема в том, что пользователь может отправить запрос следующим образом:
http://server.com?fileName=../../some_personal_file.exe
и это приведет к удалению файла за пределами каталога активов
Как я могу это предотвратить? Я думаю, проверка fileName.includes('../')
— это лишь частичное решение
Комментарии:
1. Этот вектор атаки обычно называется обходом каталога / пути, узел публикует информацию о том, как смягчить это: nodejs.org/en/knowledge/file-system/security/introduction /…
Ответ №1:
Node.js опубликовали информацию о том, как смягчить эту атаку (называемую Обходом пути).
Исходя из этой рекомендации, вы можете использовать path
модуль для обеспечения безопасности этой операции, например:
const path = require('path');
const assetsPath = '/assets';
deleteFile(file: string) {
let deletePath = path.join(assetsPath, file);
if (deletePath.indexOf(assetsPath) === 0) {
fs.unlink(deletePath, err => {});
} else {
// Display an error to the user somehow
}
}