如何在纯Python中沙盒Python?

如何在纯Python中沙盒Python?

我正在开发纯Python的网页游戏,并希望有一些简单的脚本可用于更多动态的游戏内容。特权用户可以实时添加游戏内容。

如果脚本语言可以是Python,那将是很好的。但是,由于恶意用户可能会造成严重破坏,因此无法在访问游戏运行环境的情况下运行。是否可以在纯Python中运行沙盒Python?

更新:事实上,由于真正的Python支持会有点过分,因此使用Pythonic语法的简单脚本语言将是完美的。

如果没有任何Pythonic脚本解释器,是否有任何其他开源脚本解释器用纯Python编写,我可以使用?要求是对变量,基本条件和函数调用(不是定义)的支持。


largeQ
浏览 1303回答 3
3回答

哆啦的时光机

这真的非常重要。沙箱Python有两种方法。一种是在这种环境中创建一个受限制的环境(即极少数全局等)和exec你的代码。这就是梅萨所暗示的。这很好但是有很多方法可以打破沙箱并制造麻烦。一年前在Python-dev上有一个关于这个问题的线程,其中人们通过捕获异常并在内部状态中进行操作来突破字节代码操作。如果你想要一个完整的语言,这是要走的路。另一种方法是解析代码,然后使用ast模块踢出你不想要的构造(例如import语句,函数调用等),然后编译其余的。如果你想使用Python作为配置语言等,这是要走的路。PyPy沙箱是另一种方式(因为你使用GAE可能不适合你)。虽然我自己没有使用它,但关于intertubes的话是它是唯一真正的沙盒Python。根据您对需求的描述(需求是对变量,基本条件和函数调用(不是定义)的支持),您可能希望评估方法2并从代码中删除其他所有内容。这有点棘手,但可行。

红颜莎娜

AFAIK可以在完全隔离的环境中运行代码:exec somePythonCode in {'__builtins__': {}}, {}但是在这样的环境中你几乎什么也做不了:)(你甚至连import一个模块都没有;但是仍然是恶意用户可以运行无限递归或导致内存不足。)可能你会想要添加一些模块作为接口给你游戏引擎。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python