2012-03-26 55 views
2

我是新来的Lua 要问是否有可能限制在配置文件LUA语法?我知道配置加载必须在监狱中执行,但我们如何能够在应用中加载配置文件while 1 do end?有没有办法只允许在配置中的字符串,分配和表,如果没有,那么检查lua文件是否包含不需要的结构的最好方法是什么?手动预解析唯一的解决方案?如何让LUA配置文件是安全的

回答

7

你似乎已经知道在Lua“沙盒”。所以剩下的就是你说的像无限循环这样的恶意结构。并解决你需要解决停机问题。这是不实际的。

除了“手动”解析并希望找到所有恶意内容(您不会),如何使用计时器设置运行您的Lua解释器,以便脚本在中断时间超过N秒?

+0

+1为实用解决方案,而不是使用其他硬解决方案 – cctan 2012-03-28 02:04:14

0

如果你想明确地禁止在Lua一定的结构,你得亲自扫描文件。请注意,即使在配置文件中也有这些构造的有效用途,所以您限制了用户可以执行的操作。

编写一个简单的Lua词法分析器不会太困难,该分析器忽略字符串和注释的内容,但在除return之外的任何Lua关键字上出现错误。给定适当的沙盒(即:没有功能可以被调用),这应该足以消除任何恶意的东西。

另外,还要注意的Lua 5.1没有可以很容易地防止分析器解析非文本数据(即:编译Lua的字节码)。 5.2提供了特定的API支持,用于强制加载程序只识别文本并因此拒绝字节码。