Перейти к содержимому
Noroxi

CWE-22 · 9 994 записей

Обход каталога

Почему это происходит?

Имя файла, переданное пользователем, объединяется с разрешённым каталогом, но не проверяется, остаётся ли результат внутри этого каталога.

Уязвимый и исправленный код

Показательный учебный пример. Выделенные строки показывают, где ошибка и где исправление.

Уязвимый код

ts
const file = path.join(ROOT, req.query.name);res.sendFile(file);

Исправленный код

ts
const file = path.resolve(ROOT, req.query.name);if (!file.startsWith(ROOT + path.sep)) {  return res.sendStatus(400);}res.sendFile(file);

Как предотвратить

  1. 01После разрешения пути проверяйте, что он остаётся внутри корневого каталога.
  2. 02Отдавайте файлы по идентификатору из базы данных, а не по имени.
  3. 03Запускайте серверный процесс с правом чтения только необходимых каталогов.

CVE этого класса

10 000 записей

Все классы уязвимостей