LuaInterface - 如何限制对 .Net 类的访问?

2024-01-20

我正在尝试使用 LuaInterface 2.0.3 在我的 C# 应用程序中嵌入一些 Lua 脚本功能。到目前为止,这工作得很好,但我不知道如何限制对少数指定的 .Net 类的访问。默认情况下,所有.Net库都可以通过“luanet”直接访问,并且Lua脚本可以自由打开新窗口或访问文件系统。

例如这个 Lua 脚本将打开一个新窗口:

   Form = luanet.System.Windows.Forms.Form
   mainForm = Form()
   mainForm:ShowDialog()

脚本自由固然很棒,但这可能会干扰托管应用程序,并且会产生一些我不太喜欢的与安全相关的影响。有什么办法可以禁用这个吗?


--make a table for all the classes you want to expose
safeClasses = {}
--store all the ones you want
safeClasses.Form = luanet.System.Windows.Forms.Form
--etc...

--remove access to LuaInterface
luanet = nil
package.loaded.luanet = nil
--prevent future packages from being loaded
require = nil
package.loadlib = nil

您也可以反向执行此操作,首先删除 LuaInterface 的全局实例和存储实例,然后通过本地引用完成所有工作(所有代码都在 LuaInterface 的其余部分中)block http://www.lua.org/manual/5.1/manual.html#2.4.2可以使用):

--get a local reference to LuaInterface without clobbering the name
local luainterface = luanet

--delete the global reference to it
luanet = nil

--also delete it from the package store and disable package loading
package.loaded.luanet = nil
require = nil
package.loadlib = nil

--put luanet back locally at its original name (for convenience)
local luanet = luainterface 

--make a table for all the classes you want to expose
safeClasses = {}
--store all the ones you want
safeClasses.Form = luanet.System.Windows.Forms.Form
--etc...

(你可以避免上面的三步保名舞蹈(local luainterface=luanet; luanet=nil; local luanet=luainterface)通过直接本地化到luanet然后通过删除全局_G引用全局表:

local luanet=_G.luanet
_G.luanet = nil

我只是出于个人喜好而选择不这样做。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LuaInterface - 如何限制对 .Net 类的访问? 的相关文章

  • Exit() 时是否调用基本对象析构函数?

    我意识到这个问题已经出现过几次 但我试图获得上述问题的明确答案 但我不断遇到相互矛盾的信息 我需要知道的是 当我使用 exit 时 基本类对象是否被破坏 我知道需要删除动态内存 但我的意思更像是 include
  • 传递 constexpr 对象

    我决定给予新的C 14的定义constexpr旋转并充分利用它 我决定编写一个小的编译时字符串解析器 然而 我正在努力保持我的对象constexpr将其传递给函数时 考虑以下代码 include
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • extern 声明和函数定义都在同一文件中

    我只是浏览了一下gcc源文件 在gcc c 我发现了类似的东西 extern int main int char int main int argc char argv 现在我的疑问是extern是告诉编译器特定的函数不在这个文件中 但可以
  • cpp.react库的C++源代码中奇怪的“->* []”表达式

    这是我在文档中找到的 C 片段cpp react 库 https github com schlangster cpp react implicit parallelism auto in D MakeVar 0 auto op1 in g
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 获取没有显式特征的整数模板参数的有符号/无符号变体

    我希望定义一个模板类 其模板参数始终是整数类型 该类将包含两个成员 其中之一是类型T 另一个作为类型的无符号变体T 即如果T int then T Unsigned unsigned int 我的第一直觉是这样做 template
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • 如何在 C# 中创建异步方法?

    我读过的每一篇博客文章都会告诉您如何在 C 中使用异步方法 但由于某些奇怪的原因 从未解释如何构建您自己的异步方法来使用 所以我现在有这段代码使用我的方法 private async void button1 Click object se
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • 为什么空循环使用如此多的处理器时间?

    如果我的代码中有一个空的 while 循环 例如 while true 它将把处理器的使用率提高到大约 25 但是 如果我执行以下操作 while true Sleep 1 它只会使用大约1 那么这是为什么呢 更新 感谢所有精彩的回复 但我
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐

  • 如何在 smack API 中处理添加请求

    我使用 Smack API 来编写我的 Google talk 客户端 现在我需要处理对此的添加请求 我将 SubscriptionMode 设置为手动 现在我必须注册存在数据包的侦听器 但我不知道如何 任何人都可以帮忙吗 我还没有尝试过
  • PDF 文件的结构? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 对于一个小项目 我必须解析 pdf 文件并获取其中的特定部分 简单的字符链 我想使用 python 来做
  • jq:从数组中删除元素

    我有这个 JSON 文件 想要从数组中删除一个元素 address localhost name local vars instances one two 我正在使用这个命令 jq del vars instances select ind
  • Scikit-learn RandomizedLasso 和 RandomizedLogisticRegression 已弃用

    我注意到linear model RandomizedLasso and linear model RandomizedLogisticRegression为套索回归实现稳定性选择的方法已被弃用 有谁知道为什么 稳定性选择不是一个好的方法吗
  • Xamarin.Forms 上传多个带有数据的图像

    我找到了几个有关如何在 Xamarin 中上传图像或多个图像的教程 但是 我还没有找到如何发送多个图像 每个图像都包含一些卫星数据 这是模型在服务器上的样子 public class AppFileDTO public IFormFile
  • 检查C#中的管理员权限

    我想知道程序是否以管理员身份运行 用户不必是管理员 我只想知道我的应用程序是否有权编辑某些以管理员身份运行时可编辑的受保护文件 这将返回一个 bool valid using System Security Principal bool i
  • 使用 Numpy 在 1D numpy 数组中查找局部最大值/最小值

    您能否建议 numpy scipy 中的一个模块函数可以在一维 numpy 数组中找到局部最大值 最小值 显然 最简单的方法是查看最近的邻居 但我希望有一个公认的解决方案 它是 numpy 发行版的一部分 在 SciPy 中 gt 0 11
  • Zend Framework 2 如何渲染模块内的部分?

    我的模块内的目录结构是这样的 Api Module php config module config php src etc view api api index phtml partial test phtml 然后 我正在这样做 但是
  • 在SQL中计算两个日期之间的差异,不包括周末

    我想构建一个 SQL 查询来计算两个日期之间的差异 而不计算结果中的周末天数 有没有办法格式化日期以获得这个结果 以 Oracle 数据库为例 select sysdate creation dttm from the table 你应该尝
  • 在 Objective-C 中使用 C 函数(适用于 iPhone)

    大家好 我自称是 iPhone 编程新手 拥有更长的 Perl 和 Web 背景 30 年 但上周我冒险买了几本好书 在死记硬背并阅读了 1000 多页之后 并且对它有了很好的理解之后 我已经朝着第一个优秀的原生 iPhone 应用程序迈进
  • 使用 IntelliJ 设置 scala

    我有 Intellij Ultimate 11 1 安装了 scala 插件 我使用 homebrew 安装了 scala 2 9 2 其中将 scala 放入 usr local Cellar scala 2 9 2 gt gt whic
  • 使用 PyCrypto 使用 32 字节初始化向量解密 MCRYPT_RIJNDAEL_256

    我有用 PHP 加密的数据 如下所示 mcrypt encrypt MCRYPT RIJNDAEL 256 SECRET data MCRYPT MODE CBC iv 我需要在 Python 3 应用程序中解密这些数据 我正在尝试使用 P
  • 抛出异常后返回

    有什么好处吗return之后的值throw出现异常吗 如果没有的话可以return语句被省略 是否可以以某种方式消除编译器错误C4715 not all control paths return a value 提前致谢 编辑 示例代码 f
  • 通过数字索引访问 Dictionary.Keys 键

    我正在使用一个Dictionary
  • “maven.compiler.release”作为源和目标的替代品?

    我有两个问题maven compiler release tag 我想更换
  • NTLM SQL 连接字符串

    我需要将网站的数据库连接从连接字符串中的用户名和密码切换到 NTLM 据我所知 这应该只是更新连接字符串的问题 我花了一些时间在这里和整个网络上进行搜索 我发现了很多非常令人困惑的页面来解释 NTLM 的工作原理 我以前从未使用过任何类型的
  • Google 地图地理编码 API 使用限制

    我目前正在使用 Google 的 Maps Geocoding API 正如文档所示 它每天的使用限制为 2500 个请求 我可以调用某些服务来检查我已经执行了多少请求 或者我仍然可以执行多少请求 我知道 Google 的 API 控制台中
  • 为什么 React Native 移动应用需要 redux?

    我是原生 Android 应用程序的经验开发人员 但我是 React Native 的入门级开发人员 我熟悉 basic 但无法理解为什么 Redux 与 React Native 一起使用 我想了解使用 java 的 Android Na
  • 如何使 $.serialize() 考虑那些禁用的 :input 元素?

    默认情况下 禁用的输入元素似乎被忽略 serialize 有解决方法吗 暂时启用它们 var myform myform Find disabled inputs and remove the disabled attribute var
  • LuaInterface - 如何限制对 .Net 类的访问?

    我正在尝试使用 LuaInterface 2 0 3 在我的 C 应用程序中嵌入一些 Lua 脚本功能 到目前为止 这工作得很好 但我不知道如何限制对少数指定的 Net 类的访问 默认情况下 所有 Net库都可以通过 luanet 直接访问