在MSDN文档中,SecurityPermissionFlag.SkipVerification说:
能够跳过此程序集中的代码验证。代码就是 如果授予此权限,则可以运行无法验证。
这是一个强大的权限,只能授予高度权限 可信代码。
与堆栈修饰符动态使用时,此标志无效 例如Deny,Assert和PermitOnly。
我正在开发的一些项目要求我SkipVerificationFlag
。具体案例是一些自定义类,使用 Castle Windsor 创建控件组件反转的实例,因为调用整个方法的程序集不是完全可信的。
对于SkipVerification
方法,这可能是c#中的伪代码:
[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
中完全受信任。
如果我相信我只相信Castle Windsor的代码并且不再支持,我错了吗?
上述伪代码的使用者/调用者位于不受信任(不完全信任)AppDomain
中。换句话说:使用该门的第三方代码是安全透明的。
从我的观点来看,由于温莎城堡不做危险的事情,使用整个旗帜是安全的。
我的决定在安全性方面的错误后果是什么?
谢谢。
答案 0 :(得分:0)
据我所知,并且有了可用信息,似乎断言SkipValidation
没有其他后果。
如果您可以完全依赖在关键部分内执行的代码,则可以将其视为安全代码,因此Castle Windsor(或任何其他可信代码)没有问题。