gpt4 book ai didi

c# - C# 中的 Linkdemand 警告

转载 作者:太空狗 更新时间:2023-10-30 00:55:26 25 4
gpt4 key购买 nike

我试图在我的 DLL 中获取 Iexplorer.exe 的版本。但是我每次都会收到此警告

警告 1 CA2122:Microsoft.Security:“ApCkr.IEavailable()”调用具有 LinkDemand 的“FileVersionInfo.FileMajorPart.get()”。通过进行此调用,“FileVersionInfo.FileMajorPart.get()”间接暴露给用户代码。查看以下可能会暴露规避安全保护方法的调用堆栈:

在 MSDN(安全权限)和 falgs 中进行大量搜索后,我仍然不知道我将如何摆脱这个错误。我试过了

SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]

但也无法让它工作

任何帮助将不胜感激

    #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

最佳答案

这是它正在谈论的 FileVersionInfo 类的链接需求属性:

[PermissionSet(SecurityAction.LinkDemand, Name="FullTrust")]

这在 MSDN 文章中有很好的记录,但并不总是很容易从 FxCop 消息中递归。我个人认为 Reflector 非常适合解决这个问题。

链接需求是一种在运行时检查成本非常低的需求。它在即时编译时执行,只执行一次,并且只检查直接调用者的权限。可能会发生安全漏洞,因为您的属性 getter 稍后可能会被其他 代码调用。这样的代码不会得到相同的需求检查,因为您的属性缺少该属性并且已经 jitted。您必须应用相同的安全属性。

只有当此类代码在没有 FullTrust 的情况下运行时才会出现问题。很难想出这样的场景,您必须创建自己的沙箱并将您的属性(property)暴露给此类沙箱代码。如果您想知道能够检查 DLL 版本的安全隐患:确切了解程序使用的 DLL 版本对于找出攻击向量非常重要。

FxCop 不够智能,无法检测到此类情况。它确实是一种工具,只会针对您可能忽略的事情发出警告。你可能做到了。 CAS 在其他方面很难理解,我自己也很挣扎。和其他人一样,它因此在 .NET 4 中被弃用,取而代之的是安全的沙盒模型。明智之举,不可理解的安全性是不安全的。

关于c# - C# 中的 Linkdemand 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9556764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com