2010-11-03 57 views
1

我想了解FxCop CA2122消息(可能在禁用可怜的东西之前),并且我已经明确地超越了我对.NET CAS的理解。我是否需要担心完全信任的.EXE链接需求?

该应用程序是用AllowPartiallyTrustedCallers标记的.EXE,而不是。我们从代码分析中得到了CA2122警告,抱怨我们没有将LinkDemands从最低级别的调用向上传播到本身具有LinkDemands的方法。

很明显,我们可以将LinkDemands放在调用者上,然后调用者的调用者ad-infinitum。这看起来完全没有意义,因为对这个代码的每一次调用都是完全可信的,因此(AIUI)无论如何都会满足每个链接需求。 Eric Lippert似乎认为这样做也是非常危险的。

所以:

  • 我缺少什么组件级属性说“这个代码将只在完全信任运行”? (我认为没有AllowPartiallyTrustedCallers'暗示这一点,但可能不适用于.EXE)

  • 或者我应该关闭该CA警告并继续前进?我不喜欢正确地理解他们之前,我禁用它们...

更新:有人问我,我们正在使用的框架版本 - 这是2.0RTM,这是极难得到升级过去的这一点,因为它是在XPe平台上。

回答

2

你的基本假设,大会将永远只能运行一个完全可信的可执行文件是错误的安全模式更改。没有什么能够阻止某人能够将你的程序集作为一个恶意软件中的引用库程序集。如果您更改了计算机的CAS策略以授予您的程序集完全信任,而不管它是如何部署的,那么恶意软件可能会使用您的程序集执行操作,否则它将不具备足够的权限。

这样做的结果是,无论您的预期部署方案如何,您都应该做一些事情来阻止代表调用代码满足链接要求。鉴于你自己的目标是完全信任的场景,这实际上很容易。 但是,确切的方法在很大程度上取决于您所针对的.NET Framework的哪个版本,因此您可以发布详细信息吗?

对于.NET 2.0,解决该问题最简单的方法是将SecurityTransparentAttribute或SecurityCriticalAttribute应用于您的程序集。这两个属性都会导致程序集中的代码默认为安全透明,这意味着它不能代表其调用者执行满足链接要求等任务。如果代码的某些部分需要执行不允许安全透明的代码的事情,那么您应该在程序集级别使用SecurityCriticalAttribute而不是SecurityTransparentAttribute,因为这会允许您显式地将类型和/或成员提升为security-如果他们需要它的临界性。 (有关更多细节,请参阅http://blogs.msdn.com/b/shawnfa/archive/2005/08/31/when-the-opposite-of-transparent-isn-t-opaque.aspx。)

+0

感谢您的理解 - 我需要更多地了解它,但是如果您允许您提供更有用的信息,我们将使用.NET 2.0。 – 2010-11-05 17:05:34

+0

我编辑了我早期的回复,以提供推荐的.NET 2.0方法。 – 2010-11-05 17:22:17

1

如果我这样理解正确: http://msdn.microsoft.com/en-us/library/system.security.allowpartiallytrustedcallersattribute.aspx

链路需求属性告诉.NET执行该方法的充分信任规则。这也需要一个强有力的名字。虽然您的应用程序树可能处于完全信任的环境中,但没有任何内容强制实施公共/受保护方法和类的规则。

AllowPartiallyTrustedCallers告诉.NET你不关心是谁调用它。

似乎在.NET 4

+0

所以我想答案是肯定的,如果你想强制执行它。但在企业内部环境下的努力可能不值得。 – eschneider 2010-11-03 20:45:01

+0

谢谢你 - 我的错误理解是,如果你添加APTC,那么你需要强命名才能生效,但是不想让部分信任不需要强命名。 – 2010-11-04 08:56:23

相关问题