Опишите механику работы встроенной функции compile(). Как превратить динамически сгенерированную строку с кодом на Python в объект кода (code object), безопасно выполнить его в изолированном контексте с помощью exec/eval и предотвратить уязвимости удалённого выполнения кода (RCE)?

compile(source, filename, mode) создаёт объект кода, но не выполняет его. exec/eval с отдельными globals не образуют безопасную песочницу для недоверенного Python и не предотвращают RCE.

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

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

compile(source, filename, mode) создаёт объект кода, но не выполняет его. exec/eval с отдельными globals не образуют безопасную песочницу для недоверенного Python и не предотвращают RCE.

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

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

compile(source, filename, mode) создаёт объект кода, но не выполняет его. exec/eval с отдельными globals не образуют безопасную песочницу для недоверенного Python и не предотвращают RCE.

Режим exec предназначен для блока инструкций, eval — для выражения, single — для интерактивной инструкции. Для доверенного выражения можно создать code = compile('2 + 3', '<expr>', 'eval'), затем вычислить его. Удаление builtins не гарантирует изоляцию: модель объектов Python допускает обходы наивных ограничений. Пользовательские данные лучше обрабатывать декларативным форматом или ограниченным DSL. Если нужен произвольный код, используйте отдельную жёстко изолированную среду без секретов, с лимитами ресурсов и сетевого доступа.

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

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

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

Подробнее