Код Middle SSRF, файлы и редиректы обновлено

Безопасное соединение пути

Условие

Напишите safe_join(base, name), которая возвращает абсолютный путь к файлу name внутри папки base или None, если путь выходит за пределы папки.

  • base абсолютный нормализованный путь без слэша в конце (/srv/files).
  • Отклоняйте: пустое имя, абсолютный путь, имя с нулевым байтом или обратным слэшем.
  • Соедините и нормализуйте путь (уберите . и .., работайте с POSIX-путями, символические ссылки не учитывайте).
  • Результат должен лежать строго внутри base: сама base и соседние папки вроде /srv/files2 не подходят.

Примеры

safe_join("/srv/files", "report.pdf") // "/srv/files/report.pdf"
safe_join("/srv/files", "a/b.txt") // "/srv/files/a/b.txt"
safe_join("/srv/files", "../etc/passwd") // null

Как подойти

Подсказки: 2
  1. posixpath.normpath(posixpath.join(base, name)).
  2. Сравнивайте с base + "/", а не с base.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.