【问题标题】:C# Limiting namespaces when embedding script interpreters嵌入脚本解释器时 C# 限制命名空间
【发布时间】:2013-02-17 20:47:41
【问题描述】:

我正在研究实现一个系统,在该系统中用户能够将脚本传递到我们的服务器并让它们执行。谢天谢地,Embedding Python into C# 有很多资源。但是,我最担心的是用户传递的脚本会访问系统功能并导致不良甚至恶意结果。主要示例是:无限制地写入服务器上的文件。

我一直在寻找一种好方法来完全限制脚本对我们提供给客户的框架类的访问,但我发现的大多数命中基本上都是"here's how you embed a script interpreter in C#",但从未提及任何安全问题,例如限制访问. 诚然,我可以对脚本进行初步检查并搜索任何blacklisted code,但总有机会错过一些东西。

对于执行哪种语言没有要求,最好是可以提前编译的语言。服务器将运行 C# 来响应请求并将一些请求委托给用户创建的代码。我只是找不到任何限制用户代码访问的任何语言的方法。

【问题讨论】:

  • 查看FLEE 或NCalc。两者都应该允许您将用户限制为允许的类型,并允许您根据需要公开/创建专用(安全)方法包装器。编辑:虽然这些专注于单个表达式(尽管您可以制作一些非常复杂的表达式),但它们可能足以满足需要。

标签: c# python perl scripting


【解决方案1】:

我强烈建议您使用Lua,它就是专门用于此类事情的。每个函数,无论是用户编写的还是内置的,都是表中的一个条目,因此可以很容易地限制脚本的功能。例如,删除io 表是防止恶意文件系统更改的简单方法。

【讨论】:

  • 听起来你在谈论像Remove functions from os library 这样的东西,这听起来正是我正在寻找的东西。明天我会检查一下,如果一切正常,请勾选您的答案。谢谢。
  • 任何嵌入式 Lua 脚本的全局环境(符号表)都在调用该脚本的 C 代码的完全控制之下。该脚本无法访问此表中未出现的任何内容,并且因为它是一个与其他任何表一样的 Lua 表,所以删除不需要的元素很简单。标准 Lua 库是通过环境的子表访问的,因此只需删除 io 元素即可阻止访问任何 I/O 功能,同时保留无害的 math 和 string 等库可用。
猜你喜欢
  • 2011-10-04
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
相关资源
最近更新 更多