【发布时间】:2015-03-02 07:42:21
【问题描述】:
正如标题所说:在 C# 中使用和/或传递匿名方法(Action<>、Func<>)时需要考虑哪些安全隐患?
接受Action<>/Func<> 的方法似乎是将外部代码注入程序的潜在方式。作为记录,我知道注入的方法或函数不能在任意内存访问的意义上做本质上不安全的事情,但我认为它可以允许调用代码调用例如任意 .Net 框架函数、损坏数据或以其他方式导致应用程序行为异常。
这个假设是错误的吗?
如果不是,应该怎么做才能锁定这些?此外,是否有任何方法可以验证传递给方法或函数的
/Func<>,以确保它具有预期的形式或限制其对某些类型和命名空间的访问?
另外,如果我没有完全使用正确的术语,请原谅我,我还在学习。
【问题讨论】:
-
还请注意,您可以通过继承(通过覆盖虚拟和抽象方法)和接口实现注入恶意代码。但 SLaks 的回答也适用于这些情况。例如,
System.String类通过被密封来保护自己免受这种情况的影响。 -
场景是什么?同一进程中的可信代码和不可信代码用 CAS 分隔?
-
@usr 我真的在问是否有有场景需要担心。我在这里看到了一些解决方案,它们使用它们作为一种方式,例如,通过将属性 getter 或 setter 包装在其中一个中来将其传递给命名方法。但这感觉不正确,因为据我所知,命名方法无法保证或以其他方式确保传递的 Action 或 Func 以预期的方式运行。除非命名方法真的不在乎它的作用,否则将这些用作参数是不好的做法吗?例如。 Assert.ThrowsException
().
标签: c# .net security action func