← Все комнаты Путь «Защита (код)» →
СреднийЗащита (код) Код Осенний CTF

Чистое имя файла

Прогресс комнаты 0 / 4
Задание 1Введение

Цель: Безопасно сохранять файлы с пользовательскими именами.

Напишите sanitize_filename(name): замените каждый символ вне A-Za-z0-9._- на _, уберите ведущие точки, обрежьте до 64 символов. Если получилась пустая строка — верните file.

Задание 2Теория и инструменты

Имя вроде ../../etc/passwd может записать файл за пределы папки. Ведущая точка делает файл скрытым.

Белый список символов надёжнее, чем поиск опасных.

Инструменты

  • Python 3 или Node.js
  • Встроенные тесты в редакторе

Больше теории — в разделе «Обучение: Защита (код)».

Задание 3Практика: напишите код

Примеры

Пример 1
sanitize_filename("report.pdf")
→ "report.pdf"
Пример 2
sanitize_filename("../../etc/passwd")
→ "_.._etc_passwd"

Ещё 5 скрытых тестов.

solution
Ctrl+Enter — отправить Войдите, чтобы отправить

Пошаговый план — открывайте по одному шагу

  1. 1
    Замените недопустимые символы на _.

Подсказки — каждая до решения стоит −25 очков

Задание 4Как защититься

Надёжнее вообще не использовать имя пользователя: храните файл под UUID, а исходное имя — в базе.

Разборы участников

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