【发布时间】:2013-06-11 18:01:17
【问题描述】:
我创建了一些实用程序代码,允许我将文本输入到我们的内容管理系统中,并使用类似于this 的方法动态编译和调用它。
但这会带来安全风险 - 因为内容作者可能会错误地(或更糟糕地 - 恶意地)输入代码,而这些代码会执行我所寻找的事情之外的事情。有什么建议可以保持此功能打开,但能够防止编写某些类型的代码?例如,有一些明显的事情需要限制,比如写入文件系统。
我最初的想法是排除某些程序集,但我很好奇是否有人对此有任何聪明的想法。
【问题讨论】:
-
如何在沙箱中运行部分受信任的代码:msdn.microsoft.com/en-us/library/bb763046.aspx
-
理想情况下,如果可能的话,您一开始就不会这样做......
-
根据您需要做什么以及您有多少时间,编写自己的脚本引擎可能并不难,这将仅限于您允许它执行的操作。我已经为公式(工程类型的东西)做到了这一点,用户可以在其中输入基本的数学函数、if 语句,并访问各种系统值以返回所需的结果。
-
您的选择是(按优先顺序排列)1) 不要这样做,而是另谋出路。 2) 使用部分受信任的代码,并且只允许您知道不会造成问题的操作。 Here is a similar question 给你的,我提供了关于部分受信任代码的更详细的答案。
-
您还可以考虑为您的需要创建一种特定于域的语言。 codeproject.com/Articles/26975/…
标签: c# reflection