LuaInterface - 如何限制访问 .Net 类?
2011-5-30 0:42:29
收藏:0
阅读:83
评论:2
我正在尝试使用LuaInterface 2.0.3在我的C#应用程序中嵌入一些Lua脚本功能。到目前为止,这个工作很顺利,但是我无法弄清楚如何仅限于几个指定的.Net类访问。默认情况下,所有.Net库都可以通过"luanet"直接访问,Lua脚本可以自由地打开新窗口或访问文件系统。
例如,这个Lua脚本将打开一个新窗口:
Form = luanet.System.Windows.Forms.Form
mainForm = Form()
mainForm:ShowDialog()
虽然脚本自由度很高,但这很可能会干扰主机应用程序,并带有一些安全相关的含义,我不太喜欢。有什么办法可以禁用这个功能吗?
原文链接 https://stackoverflow.com/questions/6171381
点赞
stackoverflow用户34799
--创建一个表格来存储所有您想要公开的类
safeClasses = {}
--将您想要的所有类存储进去
safeClasses.Form = luanet.System.Windows.Forms.Form
--等等...
--删除对 LuaInterface 的访问权
luanet = nil
package.loaded.luanet = nil
--防止将来装载包
require = nil
package.loadlib = nil
您还可以采用相反的方法,首先删除全局和存储的 LuaInterface 实例,然后通过本地引用执行所有操作(其他 块 中的所有代码都可以使用):
--获取 LuaInterface 的本地引用,而不会覆盖名称
local luainterface = luanet
--删除对其的全局引用
luanet = nil
--还从包存储中删除它并禁用包装载
package.loaded.luanet = nil
require = nil
package.loadlib = nil
--将原名称的 luanet 放回本地(为方便)
local luanet = luainterface
--创建一个表格来存储所有您想要公开的类
safeClasses = {}
--将您想要的所有类存储进去
safeClasses.Form = luanet.System.Windows.Forms.Form
--等等...
(您可以通过 _G
引用全局表直接将局部化到 luanet
,然后通过 _G 引用全局表删除全局引用:local luanet=_G.luanet ; _G.luanet = nil
。我只是出于个人偏好选择不这样做。)
2011-05-30 01:57:11
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
我不确定应该如何具体实现,但第一步应该是将其托管在额外的 AppDomain 中。有了这个额外的 appdomain,您可以对可以使用哪些模块进行细粒度的控制,但需要额外的工作来在主程序和脚本之间移动数据。
AssemblyLoad
/AssemblyResolve
事件应该是您的第一站。