我如何保护我的lua脚本免遭全局表被转储?
2020-7-14 14:48:50
收藏:0
阅读:127
评论:2
我如何保护我的lua脚本免遭全局表被转储?
点赞
用户4515989
1. 在全局表的子集中执行函数
你可以使用 setfenv 函数来实现这个目的(更多细节参见 这里)。
示例(Lua <5.2):
function someMaliciousFunction()
-- 做一些事情
end
someMaliciousFunction = setfenv(someMaliciousFunction, {
-- 选择这个函数应该能做的任何事情
["print"] = _G.print
})
-- 这个函数将把上面的表视为它的 _G 表
someMaliciousFunction()
示例(Lua >=5.2):
function someMaliciousFunction()
-- 做一些事情
end
local temp = _ENV
_ENV = {
-- 选择这个函数应该能做的任何事情
["print"] = _G.print
}
-- 这个函数将把上面的表视为它的全局表
someMaliciousFunction()
_ENV = temp
2. 临时覆盖全局表
你也可以覆盖全局表。这将防止任何人使用 pairs 或 ipairs 迭代所有项目,但仍然保留对所有全局变量的合格访问。
示例:
local temp = _G
_G = setmetatable({}, {__index = temp, __newindex = temp})
someMaliciousFunction()
_G = temp
2020-07-14 16:05:41
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

如果你使用的是 Lua 5.2 或以上的版本,
pairs函数会检查__pairs元方法。如果存在,它将调用它来生成pairs调用的枚举数据。因此,您可以通过给该表一个__pairs元方法来防止其他人迭代全局表,该元方法要么返回一个“空”迭代器(return function() return nil end, nil, nil),要么只是用error抛出错误。然而,Lua 的
next函数(它不是debug库的一部分)不关心__pairs元方法。它提供了对整个表的迭代。因此,您还需要从脚本可以访问的内容中删除
next,或者使用一个函数包装next,如果表具有__pairs元方法,则返回nil或通过error异常处理。在 Lua 5.2 之前,您将不得不编写自己的
pairs(和next)版本,有效地执行这些操作(即检查__pairs元方法并采取适当的行动)。