sypper-pit
Сен. 28, 2009 21:22:53
про лопату это шутка :) (смеяться после слова лопата)
sypper-pit
Сен. 28, 2009 23:42:12
igor.kaist
Сен. 29, 2009 10:37:46
А что если в PyPy покопаться?!
P.S. Sapphire, хорошая идея кстати. Думал недавно о том, что подобного на питоне нет. Удачи!
Sapphire
Сен. 30, 2009 15:06:47
Прочитав про 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, спасибо :)
Андрей Светлов
Сен. 30, 2009 16:19:24
А никак :)
Хотели сделать уже раз пять, есть реализация Питона с restricted execution. Почти работает, только глючит. И иногда позволяет “пробить” свою песочницу.
Гвидо в последний раз писал на эту тему весной:
http://neopythonic.blogspot.com/2009/03/capabilities-for-python.htmlРезюмируя - embedding создан не для того. Но можно аккуратно перебрать сам интерпретатор, оставив только “безопасные” части. Работа не на полчаса.
Sapphire
Окт. 2, 2009 00:24:26
Прочитал пост гвидо)
Спасибо, Андрей :)
Кажется, разумнее мне будет подыскать просто другой скриптовый язык, для которого проще создавать песочницу. (наконец, узнал, как это называется!)) )
igor.kaist
Окт. 2, 2009 09:25:49
Sapphire
Кажется, разумнее мне будет подыскать просто другой скриптовый язык, для которого проще создавать песочницу.
Не надо другой, для других языков подобные забавы уже есть. Для питона нет.
Почему бы не перелопатить PyPy, например?!
Sapphire
Окт. 2, 2009 15:20:16
Ну для питона они тоже ведь есть) В Google Apps, например (гвидо писал про них). Только больно сильно заморочиться надо, чтобы это организовать.
PS: интересно, как реализована питоновая песочница на
codepad.org ?
denz
Окт. 2, 2009 17:22:46
Перед выполнением передавать код классу ast, в самом классе переопределить visit_Import и visit_Call таким образом, чтобы райзить исключение при совпадении со списком “запрещенной литературы”.
Метод потенциально дырявый, но он позволяет подгружать API, и при этом запрещать отдельные аспекты кода. Сами API при этом будут ничем не ограничены, отже возможны дыры.
З.Ы. Лично я бы сделал так, как советует sypper-pit - плодил бы максимально порезанные паравиртуализаторы для каждой песочницы (например есть еще xen), и спокойно спал бы по ночам.
o_o
Окт. 2, 2009 22:00:13
Немного не в тему, но полностью готовый пример на эту тему (на с++, в качестве скриптового языка идёт с#) есть в sdk для 10 directX. Называется “Scripting”. Там есть все необходимые ограничения.