Ces*_*sar 3 .net c# visual-studio-2010 visual-studio
我想在我的DLL中获取Iexplorer.exe的版本.但是每次都会收到此警告
警告1 CA2122:Microsoft.Security:'ApCkr.IEavailable()'调用具有LinkDemand的'FileVersionInfo.FileMajorPart.get()'.通过进行此调用,'FileVersionInfo.FileMajorPart.get()'间接地暴露给用户代码.查看以下可能提供绕过安全保护的方法的调用堆栈:
在MSDN(安全权限)和falgs中进行大量搜索后,我仍然无法知道如何摆脱这个错误.我试过了
SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
Run Code Online (Sandbox Code Playgroud)
但也无法让它发挥作用
任何帮助将非常感激
#region IExplore
public string IEavailable()
{
bool IEversion;
FileVersionInfo.GetVersionInfo("C:\\program files\\\\Internet Explorer\\iexplore.exe");
FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo("C:\\program files\\\\Internet Explorer\\iexplore.exe");
int a = myFileVersionInfo.FileMajorPart;
if (a < 8)
{
IEversion = false;
}
else
{
IEversion = true;
}
return IEversion.ToString();
}
#endregion
Run Code Online (Sandbox Code Playgroud)
这是它正在讨论的FileVersionInfo类的链接需求属性:
[PermissionSet(SecurityAction.LinkDemand, Name="FullTrust")]
Run Code Online (Sandbox Code Playgroud)
这在MSDN文章中有很好的记录,但并不总是很容易从FxCop消息中提取.我个人觉得Reflector非常方便解决这个问题.
链接需求是在运行时检查的非常便宜的需求.它只是在即时编译时执行,只执行一次,只检查直接调用者的权限.发生可能的安全性泄漏是因为稍后可能会被其他代码调用属性getter .这样的代码不会得到相同的需求检查,因为您的属性缺少属性并且已经被jitted.您必须应用相同的安全属性.
当这样的代码在没有 FullTrust的情况下运行时,这只会是一个问题.有点难以想出这样的场景,你必须创建自己的沙箱并将你的属性暴露给这样的沙盒代码.如果您想知道能够检查DLL版本的安全隐患:确切知道程序使用的DLL版本对于找出攻击向量非常重要.
FxCop不够智能,无法检测到这种情况.它实际上是一种工具,只会发出你可能忽略的事情的警告.你可能做到了.CAS很难理解,我自己也很挣扎.在其他所有人中,由于这一点,它在.NET 4中被弃用,取而代之的是安全的沙盒模型.明智之举,不可理解的安全性是不安全的.
| 归档时间: |
|
| 查看次数: |
2101 次 |
| 最近记录: |