Контест Middle Сессии и безопасность обновлено
Защита от обхода каталога
Условие
Пользователь запрашивает файл по относительному пути. Разрешите путь внутри базового каталога /var/app/storage или откажите.
Правила: путь с % (возможное URL-кодирование) или абсолютный (начинается с /) сразу DENY. Обратный слеш считается разделителем, как /. Пустые сегменты и . пропускаются, .. поднимается на уровень вверх; если подняться выше базового каталога, DENY. Если после нормализации путь пустой, тоже DENY.
Ввод: n (n ≤ 10⁴), затем пути.
Вывод: /var/app/storage/нормализованный/путь или DENY.
Пример
6
avatars/1.png
../etc/passwd
img/../../secret
/etc/passwd
a/./b//c.txt
img/..
/var/app/storage/avatars/1.png
DENY
DENY
DENY
/var/app/storage/a/b/c.txt
DENY
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.