Валидация пути и блокировка доступа

Условие требует, чтобы model_path / PERMITTED_SUBPATH был одним из родителей request_path. Если это не так, выбрасывается PermissionDenied. Это проверка вложенности, но не полная защита файлового доступа.

Короткий ответ

Что ответить на собеседовании

Условие требует, чтобы model_path / PERMITTED_SUBPATH был одним из родителей request_path. Если это не так, выбрасывается PermissionDenied. Это проверка вложенности, но не полная защита файлового доступа.

Подробный разбор

Ответ с пояснениями

Условие

Разберите работу следующего кода и предложите комментарий, который пояснит его назначение.

if model_path / PERMITTED_SUBPATH not in request_path.parents:
    raise django.core.exceptions.PermissionDenied()

Опишите, что проверяется в условии и почему в случае несоответствия генерируется исключение.

Ответ

Условие требует, чтобы model_path / PERMITTED_SUBPATH был одним из родителей request_path. Если это не так, выбрасывается PermissionDenied. Это проверка вложенности, но не полная защита файлового доступа.

Подходящий комментарий: «Запретить запрос, если запрошенный путь не находится строго внутри разрешённого подкаталога».

Оператор / соединяет части Path; parents содержит предков и не содержит сам request_path. Поэтому равенство разрешённому пути не проходит проверку. Сравнение лексических путей не устраняет автоматически .., симлинки и подмену файла между проверкой и открытием. Для реальной защиты нужно нормализовать пути, ограничить доверенные корни и учитывать TOCTOU; одной этой строки недостаточно для гарантии безопасности.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее