3

我们的应用程序将用户输入解析和编译为 C# 代码,这引入了一些安全问题。通常,用户将使用数学库中的基本算术运算符和函数创建表达式。但是,也可以编写一个执行任意代码的表达式,只要它返回预期的类型。

前任。new System.Threading.Thread(<malicious code>).ManagedThreadId

我们使用CSharpCompilation该类和静态方法 fromSyntaxFactory来编译表达式。

基本上我需要的是某种方式来限制可以在表达式中使用的类型或方法。我的第一个想法是使用黑名单/白名单方法,但我不熟悉 CodeAnalysis 命名空间,希望有人能指出我正确的方向。

如果有人可以向我解释在没有System.Threading向实例添加引用的情况下上述示例如何成功编译,那也太好了CSharpCompilation

4

0 回答 0