C# 此安全警告是什么意思(.Net进程类)?

C# 此安全警告是什么意思(.Net进程类)?,c#,.net,security,fxcop,code-access-security,C#,.net,Security,Fxcop,Code Access Security,我使用的是VSTS2008+.NET2.0+C。我在构建之后运行代码分析。我得到了以下令人困惑的安全警告。这里是警告和相关代码,有什么想法吗?如果存在安全警告,如何修复 System.Diagnostics.Process myProcess = new System.Diagnostics.Process(); myProcess.StartInfo.FileName = "IExplore.exe"; myProcess.StartInfo.Arguments = @"default.htm

我使用的是VSTS2008+.NET2.0+C。我在构建之后运行代码分析。我得到了以下令人困惑的安全警告。这里是警告和相关代码,有什么想法吗?如果存在安全警告,如何修复

System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo.FileName = "IExplore.exe";
myProcess.StartInfo.Arguments = @"default.html";
myProcess.StartInfo.Verb = "runas";
myProcess.Start();

警告:CA2122:Microsoft.Security:'TestHtml()'调用具有LinkDemand的'Process.Start()'。通过进行此调用,“Process.Start()”将间接暴露给用户代码。查看以下调用堆栈,这些调用堆栈可能会暴露一种规避安全保护的方法:

您的方法调用调用进程的Foo.Start,该进程受请求的链接保护 完全信任。为了避免FxCop警告您的问题,您应该向方法中添加相同权限的链接请求或完全请求

您可以通过添加到方法中来修复它

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

请参阅

有关的详细信息,并

谢谢Kb,您推荐的文档非常有用。我想确认我的理解是否正确。我认为根本原因是进程。Start需要链接请求(直接调用方的权限检查),但我实现的方法TestHtml没有检查直接调用方的权限,因此存在一个安全漏洞,TestHtml的直接调用方可能没有足够的权限,这是正确的理解吗?@George2:据我所知,你说得对。Process.Start已声明安全检查。调用方必须声明相同的安全检查或确保不会违反安全性(然后忽略检查)。谢谢Kb,我有一些新想法,我认为这不是安全漏洞。假设方法Foo调用TestHtml,TestHtml调用Process.Start。即使没有使用LinkDemand启用TestHtml,也会使用LinkDemand启用sice Process.Start,它将始终检查TestHtml的权限(TestHtml是直接调用方)。因此,即使Foo没有足够的权限,从TestHtml到Process.Start的调用也将失败。所以,我认为没有安全问题。有什么意见吗?@George2:Link Demand不会在堆栈中运行,因此我认为LinkDemand只对直接调用方进行检查“唯一不会导致堆栈遍历的请求是链接请求,它只检查直接调用方。”@George2:在这个链接中有一个很好的例子:阅读第二段。此检查是在程序集之间进行的。@George,现在只是猜测,但如果TestHtml在失败之前更改任何应用程序状态,则最好尽早检查安全要求。哦,确实是错误的,请尝试:)如果您的程序集允许来自不受信任/部分信任被调用方的调用,则存在安全问题。如果程序集以完全信任的方式运行,例如GAC,但不检查其调用者,则调用进程.Start将通过,因为它只检查直接调用者。安全总比后悔好。是的,你很困惑。CAS权限在线程上,但在调用堆栈上。标识权限位于线程上。是你的代码拥有CAS权限,而不是某个特定的用户。哦,是的,应该不是。啊,有点像。CAS仅适用于.NET,适用于软件。Identity既是.NET,又是底层操作系统。