Lua 可以支持数据 URL 吗?

Lua 可以支持数据 URL 吗?

在 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 目录中并在必要时进行更新。

相关内容