我正在研究实现一个系统,用户可以将脚本传递给我们的服务器并执行它们。值得庆幸的是Embedding Python into C#有很多资源。但是,我最担心的是用户传递访问系统功能的脚本并导致不良甚至恶意的结果。主要的例子是:写入服务器上的文件不受限制。
我一直在寻找一种好方法来完全限制脚本访问我们提供给客户的框架类,但我发现的大多数命中基本上都是"here's how you embed a script interpreter in C#"但从未提及任何安全问题,如限制访问。 不可否认,我可以对脚本进行初步传递并搜索任何blacklisted code,但总有机会错过。
不需要执行哪种语言,最好是可以提前编译的语言。服务器将运行C#来回答请求并将一些委托给用户创建的代码。我很难找到任何限制用户编写代码访问的语言的方法。
答案 0 :(得分:2)
我强烈建议你使用Lua
,这正是针对这类事情的。每个函数,无论是用户编写的还是内置的,都是表中的条目,因此可以非常容易地限制脚本的功能。例如,删除io
表是防止恶意文件系统更改的简单方法。