限制C#中动态调用的功能性

3
我创建了一些实用程序代码,使我能够获取输入到我们内容管理系统中的文本,并使用类似于这个方法动态编译和调用它。
但是这会带来安全风险-因为内容作者可能会错误地(或更糟糕的是恶意地)输入可执行代码。有没有建议可以保持此功能开放,但能够防止编写某些类型的代码?例如,显然需要限制访问文件系统之类的操作。
我的初步想法是排除某些程序集,但我很好奇是否有任何聪明的想法可以解决这个问题。

1
如何在沙盒中运行部分受信任的代码:http://msdn.microsoft.com/zh-cn/library/bb763046.aspx - asawyer
理想情况下,如果有可能的话,最好根本不要这样做... - Servy
根据您需要做什么以及您有多少时间,编写自己的脚本引擎可能并不难,而且可以限制它只能执行您允许的操作。我曾为公式(工程类型的东西)编写过这样的引擎,用户可以输入基本的数学函数、if语句,并访问各种系统值以返回所需的结果。 - Kratz
你的选择(按优先顺序)是:1) 不要这样做,寻找其他方法。 2) 使用部分可信代码,并仅允许你知道不会引起问题的操作。这里有一个类似的问题,以及我在部分可信代码方面提供的更详细的答案。 - Scott Chamberlain
1
你也可以考虑为你的需求创建一个特定领域语言。http://www.codeproject.com/Articles/26975/Writing-Your-First-Domain-Specific-Language-Part-1 - asawyer
2个回答

6

不要这样做。用户可以写任何东西,你无法阻止所有可能性。在安全方面,你应该始终指定用户可以做什么而不是不能做什么(白名单而非黑名单),因为如果你采用其他方式,你会错过一些东西。

在这种特定情况下,允许用户编写任意代码似乎从来都不是一个好主意。相反,你应该选择用户可以执行的特定操作,并为每个操作添加一个按钮/控件。


1
如果你确实需要这样的功能,请考虑创建非常有限的功能。不要允许用户输入文本;给他们“块”。从非常基础、有限的指令开始,只有在被要求时才添加新的指令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接