![Lua 可以支持数据 URL 吗?](https://linux22.com/image/1600413/Lua%20%E5%8F%AF%E4%BB%A5%E6%94%AF%E6%8C%81%E6%95%B0%E6%8D%AE%20URL%20%E5%90%97%EF%BC%9F.png)
在 LUA 中,您可以使用 Loadstrings 加载 HTTP 请求,它可以从任何链接获取数据。
我注意到这些“加载字符串”在互联网上查找起来相当烦人,因为使用这些加载字符串脚本的“roblox 黑客”社区很大。
因此很难找到相关信息
所以我想问一下这里的人们,我的 lua 加载字符串可以支持 DataURL 吗?我正在运行一个没有插件的简单 lua 环境。(基本上,我希望能够使用一个小型的“base64 网页”加载外部脚本,该网页从另一个站点抓取数据,但如果在线站点出现故障,则始终有一个备份离线密钥,因此是数据 URL)
答案1
虽然使用 loadstring 从外部源运行 Lua 代码当然是可能的,但这并不是很好的做法。从互联网执行任意代码通常是不安全的。如果提供这些文件的服务器遭到黑客攻击,所有客户端都将受到威胁。第二个问题是,如果客户端运行的是旧版本,则来自服务器的任何代码编码都可能失败,因此更新和保持同步将是一场噩梦。更好的方法是从服务器发送纯数据。您不希望服务器知道有关客户端的任何信息。如果您绝对必须使用 loadstring,那么至少要确保使用 setfenv 对其进行沙盒处理:
function saferload(sz, env)
local f = pcall(loadstring, sz)
if not f then
return
end
env = env or {}
setfenv(f, env)
return pcall(f) or env
end
您不需要使用 base64 编码任何内容。只需确保您的服务器标头正确即可。在 PHP 中,它看起来像:
header("Content-Type: text/plain");
关于您的 DataURLs 问题,请注意您也可以从服务器获取二进制数据(在这种情况下您不需要 loadstring)。从服务器获取文件后,您可以将其保存在 AppData 目录中并在必要时进行更新。