Форум сайта python.su
6
про лопату это шутка :) (смеяться после слова лопата)
Офлайн
6
Офлайн
3
А что если в PyPy покопаться?!
P.S. Sapphire, хорошая идея кстати. Думал недавно о том, что подобного на питоне нет. Удачи!
Офлайн
0
Прочитав про PyPy, а потом про CPython, я в итоге набрёл вот на такую страницу документации:
http://docs.python.org/extending/embedding.html
“This can be used for many purposes; one example would be to allow users to tailor the application to their needs by writing some scripts in Python.” - кажется, именно для этого мне и нужен embedded python :)
Только как ограничивать возможности выполняемого скрипта для этих целей, я в этой документации так и не нашёл.
igor.kaist, спасибо :)
Офлайн
14
А никак :)
Хотели сделать уже раз пять, есть реализация Питона с restricted execution. Почти работает, только глючит. И иногда позволяет “пробить” свою песочницу.
Гвидо в последний раз писал на эту тему весной: http://neopythonic.blogspot.com/2009/03/capabilities-for-python.html
Резюмируя - embedding создан не для того. Но можно аккуратно перебрать сам интерпретатор, оставив только “безопасные” части. Работа не на полчаса.
Офлайн
0
Прочитал пост гвидо)
Спасибо, Андрей :)
Кажется, разумнее мне будет подыскать просто другой скриптовый язык, для которого проще создавать песочницу. (наконец, узнал, как это называется!)) )
Офлайн
3
SapphireНе надо другой, для других языков подобные забавы уже есть. Для питона нет.
Кажется, разумнее мне будет подыскать просто другой скриптовый язык, для которого проще создавать песочницу.
Офлайн
0
Ну для питона они тоже ведь есть) В Google Apps, например (гвидо писал про них). Только больно сильно заморочиться надо, чтобы это организовать.
PS: интересно, как реализована питоновая песочница на codepad.org ?
Офлайн
0
Перед выполнением передавать код классу ast, в самом классе переопределить visit_Import и visit_Call таким образом, чтобы райзить исключение при совпадении со списком “запрещенной литературы”.
Метод потенциально дырявый, но он позволяет подгружать API, и при этом запрещать отдельные аспекты кода. Сами API при этом будут ничем не ограничены, отже возможны дыры.
З.Ы. Лично я бы сделал так, как советует sypper-pit - плодил бы максимально порезанные паравиртуализаторы для каждой песочницы (например есть еще xen), и спокойно спал бы по ночам.
Офлайн
0
Немного не в тему, но полностью готовый пример на эту тему (на с++, в качестве скриптового языка идёт с#) есть в sdk для 10 directX. Называется “Scripting”. Там есть все необходимые ограничения.
Офлайн