javascript - 最终用户脚本

标签 javascript python lua sandbox

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

我真的不在乎什么语言是什么。 LUA、Python、JavaScript,我可以接受任何可读的内容。

在不受信任的脚本中运行一个函数,传递一些信息并获取更多信息有多难?我读过 JVM Security Manager is a no-go 和 Python is nearly unsandboxable,但我对这个主题知之甚少,无法真正判断来源。

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

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

最佳答案

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

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

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

Lua Wiki 有一个简单的 example sandbox .
source codelua live demo可能也很有趣。

关于javascript - 最终用户脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10142236/

相关文章:

python - pygame 的初学者问题

c++ - Luabridge:返回 C++ 生命周期托管对象

javascript - 在javascript中计算百分比增量

javascript - 是否普遍支持更改元素的 ID?

python - 有没有办法让 tkinter 在打开时立即执行命令?

python - 打包多个Python文件: Getting Import error

javascript - 相同数据集的数据在chartjs中没有相同的颜色

java - 在 Struts Java 和 Javascript 之间共享常量

lua - Corona with Lua - 将文本转换为公式

Lua:嵌套的 if 语句