终端用户脚本化

我想在应用程序中提供端用户脚本(在服务器端运行)。我一直在阅读相关资料,发现沙箱问题比我想像的更复杂。

我并不关心使用什么语言。LUA、Python、JavaScript,只要易于阅读我都可以接受。

运行不受信任的脚本中的函数、传递一些信息并获取一些信息有多难?我已经知道JVM安全管理器不可用,Python几乎无法沙箱化,但我对此知之甚少,无法判断信息来源的可靠性。

例如,如何解释一个接受JSON(从Java、Python或甚至Node.js中)的JS函数,并返回获得的JSON?

我希望避免自己实现类似Python的解释器,因为我知道它将非常低效。

原文链接 https://stackoverflow.com/questions/10142236

点赞
stackoverflow用户367180
stackoverflow用户367180

Lua 拥有良好的沙盒功能,代码简单易懂。

它具有 setfenv() 函数,可以在特定环境中运行代码。不受信任的代码只能访问特定环境中的内容。

对于 C 函数,如 string.rep,可以通过替换为 Lua 函数或提供自定义内存分配器给 lua_newstate 来防止内存过度消耗。

另外,如果您决定使用 Lua 用于受信任的代码并与不受信任的代码进行交互,可以使用 协程debug.sethook 来控制 CPU 使用率。

Lua Wiki 中有一个简单的 沙盒示例

lua 在线演示源代码 可能也会引起兴趣。

2012-04-13 14:34:46
stackoverflow用户7432
stackoverflow用户7432

Tcl具有非常强大的沙盒模型,可以说是最适合终端用户脚本编写的语言之一。您可以在safe interpreter手册页面中了解更多关于它的信息。

2012-04-15 00:53:13