Отключение стандартного и файл ввода / вывода в Python реализации песочницы

Я пытаюсь настроить песочницу Python и хочу запретить доступ к стандартному и файловому вводу / выводу. Я работаю в песочнице внутри работающего сервера Python.

Я уже посмотрел на модули, как RestrictedPython а также PyPy; однако я хочу иметь возможность компилировать код песочницы внутри моего работающего сервера Python, а не через внешний процесс.

Существуют ли альтернативные способы запрета доступа к таким командам, как print, raw_input, или же open? Могут ли вышеупомянутые модули использоваться таким образом, чтобы код песочницы компилировался в работающей программе Python?

В худшем случае, как бы вы запретили доступ к raw_input?

РЕДАКТИРОВАТЬ: Согласно этому руководству по безопасной оценке кода Python, можно ли было бы передать в управляемый встроенный модуль?

1 ответ

Решение

Приблизительный консенсус по этому вопросу заключается в том, что сложности и интроспективные способности CPython делают ненадежными попытки внесения в черный список частей интерпретатора. Я полагаю, что одной из главных попыток был safelite Тава. Также нетрудно вызвать сбой CPython, который открывает другой путь для использования при запуске произвольного кода. Избегать исчерпания ресурсов или использования ЦП DoS из произвольного кода, вероятно, невозможно сделать в процессе (вам понадобится сторожевой таймер, системные ограничения и т. Д.).

Для людей, которые хотят иметь изолированное выполнение кода в Python, крайне важно избегать собственного (или просто изменять sys, __builtins__): очень легко убедить себя в том, что он надежен, и все же пропустить какой-то очевидный обходной путь, который обходит вашу защиту. Имейте в виду, что Python имел обыкновение включать модуль, который предлагал такую ​​защиту и даже имел явные проблемы, которые позволяли обойти его ограничения. IIRC, он был уязвим для ловли неограниченных объектов (посредством самоанализа) в ограниченную среду.

Тем не менее, pysandbox написан основным разработчиком Python, который считает, что он безопасен при ограничении, например, IO (и включает в себя много предыдущих исследований), и может работать в процессе, как вы хотите (хотя и с несколькими меньшими возможностями, такими как DoS). защита от использования процессора и памяти).

Другие вопросы по тегам