Существует ли «безопасное» подмножество Python для использования в качестве встроенного языка сценариев? - PullRequest
11 голосов
/ 14 мая 2009

Во многих приложениях Python, которые я создал, я часто создаю простые модули, содержащие только константы, которые будут использоваться в качестве файлов конфигурации. Кроме того, поскольку файл конфигурации на самом деле является файлом кода Python, я могу добавить простую логику для изменения переменных в зависимости от уровня отладки и т. Д.

Хотя это прекрасно работает для внутренних приложений, я бы с осторожностью выпускал такие приложения на волю, опасаясь, что кто-то случайно или злонамеренно добавит в файл деструктивный код. То же самое относится и к использованию Python в качестве встроенного языка сценариев.

Существует ли подмножество Python, которое считается "безопасным" для встраивания? Я понимаю, насколько безопасно это можно считать довольно субъективным. Тем не менее, и Java-апплеты, и Flash имеют четкую песочницу безопасности Мне интересно, есть ли версия Python с подобными правилами?

РЕДАКТИРОВАТЬ: Я спрашиваю не столько из-за подхода с использованием файла конфигурации, сколько потому, что мне интересно внедрить некоторые механизмы сценариев / плагинов в новое приложение, и я не хочу плагин сценарий, чтобы иметь возможность, скажем, удалять файлы. Это выходит за рамки возможностей приложения.

Ответы [ 12 ]

0 голосов
/ 16 июля 2009

Звучит так, как вы хотите: Восстановление режима Python с ограничением .

Интерпретатор Python имеет встроенный «ограниченный» режим, который включается путем изменения магической переменной __builtins__. Статья Проложив путь к обеспечению безопасности интерпретатора Python объясняет хитрость более подробно. Обратите внимание, что для полноценной работы требуется патч для интерпретатора Python; Я не знаю, было ли оно уже применено.

Чистое подтверждение концепции Python см. В его предыдущем посте Задача взлома безопасности Python .

0 голосов
/ 15 мая 2009

Для обсуждения вопросов, ранее встречавшихся с модулем rexec:

Они взяты из HOWTO с ограниченным исполнением .

...