在 MSDN 文档中,SecurityPermissionFlag.SkipVerification说:
能够跳过此程序集中的代码验证。如果授予此权限,则可以运行无法验证的代码。
这是一个强大的权限,应该只授予高度可信的代码。
当与堆栈修饰符(例如 Deny、Assert 和 PermitOnly)一起动态使用时,此标志无效。
我目前正在开发的一些项目要求我使用SkipVerificationFlag
. 具体情况是一些自定义类使用Castle Windsor 创建控制反转组件的实例,因为调用整个方法的程序集不是完全信任的。
这可能是c#中用于方法的伪代码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
中。或者换句话说:使用该门的第三方代码是安全透明的。
从我的角度来看,由于温莎城堡不做危险的事情,所以使用整个旗帜是安全的。
我的决定在安全方面有什么不良后果?
谢谢你。