2012-04-13 41 views
5

我想在应用程序中提供最终用户脚本(可运行服务器端)。我一直在阅读,并发现沙盒比我想象的更为棘手。最终用户脚本

我真的不在乎什么语言是。 LUA,Python,JavaScript,我可以阅读任何东西。

在一个不受信任的脚本中运行一个函数,传递一些信息并获得更多信息有多难?我读过JVM安全管理器是一个不行,Python几乎不可用,但我对这个主题知之甚少,不能真正判断源。例如,我如何解释JS中的一个函数,该函数需要一个JSON(从Java或Python甚至是node.js)并获取返回的JSON?

我想避免自己实现一个pythonish i-just-know-it-will-suck语言解释器。

+3

JavaScript似乎是最安全的选择。它基本上是为这个确切的目的而设计的。 – 2012-04-13 13:59:12

+1

至于沙盒Python,有[一些建议](http://wiki.python.org/moin/Asking%20for%20Help/How%20can%20I%20run%20an%20untrusted%20Python%20script%20safely%20 %28i.e.%20Sandbox%29)。 – 2012-04-13 14:01:06

+0

@Lattyware:保护CPython的建议基本上没用,恕我直言。他们推荐chrooting(这是不安全的)和虚拟化(这是昂贵的)。 – 2012-04-13 14:02:51

回答

4

Lua具有良好的沙盒功能,干净简单。

它具有可在特定环境中运行代码的setfenv()函数。不受信任的代码只能访问特定环境中的内容。
对于C函数(例如string.rep),可以通过将其替换为Lua函数或向lua_newstate提供自定义内存分配程序来防止内存过度消耗。另外,如果您决定要使用Lua作为受信任的代码并使其与不受信任的代码接口,则可以使用coroutinesdebug.sethook来控制CPU使用率。

Lua Wiki有一个简单的example sandbox
lua live demosource code也可能引起人们的兴趣。

+0

感谢您的推荐和参考!我四处阅读,并决定我会去这里,看看它带领我。看起来不错! – slezica 2012-04-15 21:56:14

1

Tcl具有非常强大的sanbox模型,并且可以说是用于最终用户脚本的更好的语言之一。您可以在safe interpreter手册页阅读更多关于它的信息。