Чистое имя файла
Задание 1Введение
Цель: Безопасно сохранять файлы с пользовательскими именами.
Напишите sanitize_filename(name): замените каждый символ вне A-Za-z0-9._- на _, уберите ведущие точки, обрежьте до 64 символов. Если получилась пустая строка — верните file.
Задание 2Теория и инструменты
Имя вроде ../../etc/passwd может записать файл за пределы папки. Ведущая точка делает файл скрытым.
Белый список символов надёжнее, чем поиск опасных.
Инструменты
- Python 3 или Node.js
- Встроенные тесты в редакторе
Больше теории — в разделе «Обучение: Защита (код)».
Задание 3Практика: напишите код
Примеры
sanitize_filename("report.pdf")
→ "report.pdf"sanitize_filename("../../etc/passwd")
→ "_.._etc_passwd"Ещё 5 скрытых тестов.
Пошаговый план — открывайте по одному шагу
- 1Замените недопустимые символы на
_. - 2Уберите ведущие точки и обрежьте до 64 символов.
- 3Для пустой строки верните
file.
Подсказки — каждая до решения стоит −25 очков
Задание 4Как защититься
Надёжнее вообще не использовать имя пользователя: храните файл под UUID, а исходное имя — в базе.
Разборы участников
Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.