c#中动态调用的限制功能
本文关键字:功能 调用 动态 | 更新日期: 2023-09-27 18:17:59
我已经创建了一些实用程序代码,允许我将文本输入到我们的内容管理系统中,并动态编译并使用类似于此的方法调用它。
但是这会带来安全风险——因为内容作者可能会错误地(或者更糟的是——恶意地)输入代码,这些代码会执行我所寻找的之外的操作。对于保持此功能开放,但能够防止编写某些类型的代码,有什么建议吗?例如,有一些明显的事情需要限制,比如对文件系统的写入。
我最初的想法是排除某些组件,但我很好奇是否有人对此有任何聪明的想法。
不要这样做。用户可以编写的内容有无限的可能性,您无法阻止所有这些可能性。在安全方面,你应该总是指定用户可以做什么而不是不能做什么(白名单而不是黑名单),因为如果你不这样做,你会错过一些东西。
在这种情况下,允许用户编写任意代码似乎从来不是个好主意。相反,您应该选择用户可以执行的特定操作,并为每个操作添加按钮/控件。
如果您确实需要这些功能,请考虑创建非常有限的功能。不允许用户输入文本;给他们"积木"。从非常基本的、有限的指令集开始,只有在需要时才添加新的指令集。