Что такое уязвимость race condition на уровне файловой системы (TOCTOU — Time-of-Check to Time-of-Use) и как её избежать в Python?

TOCTOU — гонка между проверкой пути и действием: после exists() или проверки прав файл может быть заменён. По возможности выполняйте нужную операцию атомарно и проверяйте уже открытый дескриптор.

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

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

TOCTOU — гонка между проверкой пути и действием: после exists() или проверки прав файл может быть заменён. По возможности выполняйте нужную операцию атомарно и проверяйте уже открытый дескриптор.

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

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

TOCTOU — гонка между проверкой пути и действием: после exists() или проверки прав файл может быть заменён. По возможности выполняйте нужную операцию атомарно и проверяйте уже открытый дескриптор.

Для создания нового файла без перезаписи подходит open(path, "x"), а для временного — безопасные функции tempfile, не ручная генерация имени. В чувствительном коде используют операции относительно доверенного dir_fd, ограничения на ссылки и проверку через fstat. Один O_NOFOLLOW обычно защищает лишь последний компонент, а не весь путь. Обрабатывайте ошибки самой операции; предварительная проверка не является гарантией неизменности файловой системы.

Источник: docs.python.org.

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

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

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

Подробнее