2

在 MSDN 文档中,SecurityPermissionFlag.SkipVerification说:

能够跳过此程序集中的代码验证。如果授予此权限,则可以运行无法验证的代码。

这是一个强大的权限,应该只授予高度可信的代码。

当与堆栈修饰符(例如 Deny、Assert 和 PermitOnly)一起动态使用时,此标志无效。

我目前正在开发的一些项目要求我使用SkipVerificationFlag. 具体情况是一些自定义类使用Castle Windsor 创建控制反转组件的实例,因为调用整个方法的程序集不是完全信任的

中用于方法的伪代码SkipVerification

[SecuritySafeCritical]
[ReflectionPermission(SecurityAction.Assert, Unrestricted = true)]
[SecurityPermission(SecurityAction.Assert, SkipVerification = true)]
public override TComponent Resolve<TComponent>(string id = null, bool release = true, object argumentsAsAnonymousObject = null)
{
     // Some stuff...
     windsorContainer.Resolve<TComponent>(...);
}

Castle Windsor组件在AppDomain.

所以问题是...

如果我相信我只是相信温莎城堡的代码,而不再相信,那我错了吗?

上述伪代码的消费者/调用者处于不受信任(不完全受信任)AppDomain中。或者换句话说:使用该门的第三方代码是安全透明的。

从我的角度来看,由于温莎城堡不做危险的事情,所以使用整个旗帜是安全的

我的决定在安全方面有什么不良后果?

谢谢你。

4

1 回答 1

0

据我所知,根据可用信息,似乎断言没有其他后果SkipValidation

如果您可以完全依赖在临界区中执行的代码,则可以将其视为安全代码,因此 Castle Windsor(或任何其他受信任的代码)没有问题。

于 2013-03-07T11:54:32.447 回答