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

Правила доступа

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

Цель: Писать правила доступа по шаблонам путей.

Напишите path_allowed(path, rules). Правило — allow:шаблон или deny:шаблон. В шаблоне * — любые символы кроме /, ** — любые символы. Шаблон должен совпасть со всем путём. Решает последнее совпавшее правило; если ни одно не совпало — запрет.

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

Порядок правил важен: «последнее совпадение выигрывает» — как в .gitignore. По умолчанию запрет.

Ошибки в шаблонах (* захватывает /) открывают доступ к вложенным путям.

Инструменты

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

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

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

Примеры

Пример 1
path_allowed("/public/a.css", ["allow:/public/**"])
→ true
Пример 2
path_allowed("/admin", ["allow:/**", "deny:/admin"])
→ false

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

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

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

  1. 1
    Переведите шаблон в регулярное выражение: ** → .*, * → [^/]*, остальное экранируйте.

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

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

Нормализуйте путь (.., //, процентное кодирование) до проверки правил.

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

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