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

时间:2013-06-11 18:01:18

标签: c# reflection

我创建了一些实用程序代码,允许我将文本输入到我们的内容管理系统中,并使用类似于this的方法动态编译和调用它。

但是这会增加安全风险 - 因为内容作者可能会错误地(或者更糟糕地 - 恶意地)输入代码,这些代码可能会超出我想要的范围。有关保持此功能开放的任何建议,但能够阻止编写某些类型的代码吗?例如,有明显的限制,例如写入文件系统。

我最初的想法是排除某些集会,但我很好奇是否有人对此有任何聪明的想法。

2 个答案:

答案 0 :(得分:6)

不要这样做。用户可以编写的内容无限可能,您无法阻止它们。在安全性方面,您应该始终指定用户可以执行的操作而不是他可以执行的操作(白名单而不是黑名单),因为如果您这样做,您将会遗漏一些内容。

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

答案 1 :(得分:1)

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