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

Фильтр загрузок

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

Цель: Фильтровать загружаемые файлы по белому списку.

Напишите is_allowed_upload(filename). Разрешены только расширения png jpg jpeg gif pdf (без учёта регистра). Запретить: имя без расширения или начинающееся с точки, символы /, \ и нулевой байт, а также опасные промежуточные расширения php phtml php5 exe sh js html svg (например, shell.php.png).

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

Двойное расширение shell.php.png выполнится как PHP на неправильно настроенном Apache.

Белый список надёжнее чёрного: разрешаем известное, остальное запрещаем.

Инструменты

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

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

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

Примеры

Пример 1
is_allowed_upload("cat.png")
→ true
Пример 2
is_allowed_upload("CAT.JPG")
→ true

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

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

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

  1. 1
    Отсеките имена с /, \ и нулевым байтом.

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

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

Храните загрузки вне корня сайта, под случайными именами и проверяйте содержимое, а не только имя.

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

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