Lua C 脚本的权限
permissions for Lua Scripts in C
是否可以给 lua 脚本较低的权限,使其无法执行 OS 功能?
例如:
os.execute("mkdir ..")
我使用 lua 5.3.5 库。也许它包含允许或禁止某些 lua 功能的选项?
是的,这是可能的,通常Lua
初始化加载所有标准库:
lua_State *LuaState = luaL_newstate();
luaL_openlibs(LuaState);
但您可以进行调整,以仅包含您需要的功能 lualib.h
:
luaopen_package
luaopen_coroutine
luaopen_string
luaopen_utf8
luaopen_table
luaopen_math
luaopen_io
luaopen_os
luaopen_debug
在这种情况下,您可以进行以下初始化:
lua_State *LuaState = luaL_newstate();
luaopen_io(LuaState);
luaopen_table(LuaState);
luaopen_string(LuaState);
您可以在文档的第 6 章中找到更多详细信息
如果您使用 luaL_openlibs
加载 Lua 的标准库,只需将 linit.c
复制到您的项目并编辑它以选择您要导出的库。
如果您只想删除几个函数,请在加载库后执行此操作:
luaL_dostring(L,"os.execute=nil");
是否可以给 lua 脚本较低的权限,使其无法执行 OS 功能?
例如:
os.execute("mkdir ..")
我使用 lua 5.3.5 库。也许它包含允许或禁止某些 lua 功能的选项?
是的,这是可能的,通常Lua
初始化加载所有标准库:
lua_State *LuaState = luaL_newstate();
luaL_openlibs(LuaState);
但您可以进行调整,以仅包含您需要的功能 lualib.h
:
luaopen_package
luaopen_coroutine
luaopen_string
luaopen_utf8
luaopen_table
luaopen_math
luaopen_io
luaopen_os
luaopen_debug
在这种情况下,您可以进行以下初始化:
lua_State *LuaState = luaL_newstate();
luaopen_io(LuaState);
luaopen_table(LuaState);
luaopen_string(LuaState);
您可以在文档的第 6 章中找到更多详细信息
如果您使用 luaL_openlibs
加载 Lua 的标准库,只需将 linit.c
复制到您的项目并编辑它以选择您要导出的库。
如果您只想删除几个函数,请在加载库后执行此操作:
luaL_dostring(L,"os.execute=nil");