5

我想在应用程序中提供最终用户脚本(将在服务器端运行)。我一直在阅读,发现沙盒比我想象的要严重得多。

我真的不在乎语言是什么。LUA、Python、JavaScript,我对任何可读的东西都很好。

在不受信任的脚本中运行函数、传递一些信息并获取更多信息有多难?我读过 JVM Security Manager is a no-go 并且 Python 几乎是不可沙盒化的,但我对该主题知之甚少,无法真正判断来源。

例如,我如何在 JS 中解释一个接受 JSON(例如,来自 Java、Python,甚至 node.js)的函数,并取回返回的 JSON?

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

4

2 回答 2

4

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

它具有setfenv()函数,可以在特定环境中运行代码。不受信任的代码只能访问特定环境中的内容。
对于 C 函数,例如string.rep,您可以通过将它们替换为 Lua 函数或提供自定义内存分配器来防止内存过度消耗lua_newstate

此外,如果您决定希望将 Lua 用于受信任的代码并使其与不受信任的代码交互,您可以使用协程debug.sethook控制 CPU 使用率。

Lua Wiki 有一个简单的示例沙箱lua 现场演示
源代码也可能很有趣。

于 2012-04-13T14:34:46.197 回答
1

Tcl 有一个非常强大的 sanbox 模型,并且可以说是用于最终用户脚本的更好的语言之一。您可以在安全解释器手册页上阅读更多相关信息。

于 2012-04-15T00:53:13.720 回答