Код 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
posixpath.normpath(posixpath.join(base, name)).- Сравнивайте с
base + "/", а не сbase.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.