这个安全警告是啥意思(.Net Process 类)?

Posted

技术标签:

【中文标题】这个安全警告是啥意思(.Net Process 类)?【英文标题】:what does this security warning mean (.Net Process class)?这个安全警告是什么意思(.Net Process 类)? 【发布时间】:2009-07-18 10:37:11 【问题描述】:

我正在使用 VSTS 2008 + .Net 2.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()”间接暴露给用户代码。查看以下可能暴露绕过安全保护方法的调用堆栈:

【问题讨论】:

【参考方案1】:

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

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

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

见http://msdn.microsoft.com/en-us/library/970x52db.aspx

【讨论】:

@George,现在只是猜测,但最好尽早检查安全要求,如果 TestHtml 会在失败之前更改任何应用程序状态。 糟糕,确实是错误的,请尝试 :) 如果您的程序集允许来自不受信任/部分信任的被调用者的调用,则会出现安全问题。如果您的程序集以完全信任的方式运行,例如 GAC,但不检查其调用者,则 Process.Start 中的调用将通过,因为它只检查直接调用者。安全总比后悔好。 是的,你很困惑。 CAS 权限在线程上,但在调用堆栈上。身份权限在线程上。具有 CAS 权限的是您的代码,而不是特定用户。 糟糕,是的,应该不是。 啊,有点。 CAS 仅适用于 .NET,适用于软件。身份既是 .NET,又是底层操作系统。【参考方案2】:

更多关于security warnings和CA2122 - Do not indirectly expose methods with link demands的信息

【讨论】:

感谢 Kb,您推荐的文档很有帮助。我想确认我的理解是否正确。我认为根本原因是Process.Start需要链接需求(直接调用者的权限检查),但是我实现的TestHtml方法并没有检查直接调用者的权限,所以存在TestHtml的直接调用者可能不够用的安全漏洞许可,这是正确的理解吗? @George2:据我了解,您是对的。 Process.Start 已声明安全检查。调用者必须声明相同的安全检查或确保不会违反安全性(然后忽略检查)。 感谢 Kb,我有一些新想法,我认为这不是安全漏洞。假设方法 Foo 调用 TestHtml 并且 TestHtml 调用 Process.Start。即使TestHtml 没有用LinkDemand 启用,sice Process.Start 用LinkDemand 启用,它总是会检查TestHtml 的权限(TestHtml 是直接调用者)。所以即使 Foo 没有足够的权限,从 TestHtml 到 Process.Start 的调用也会失败。所以,我认为没有安全问题。有没有cmets? @George2:Link Demand 不会遍历堆栈,所以我认为 LinkDemand 只检查直接调用者。 msdn.microsoft.com/en-us/library/60zfc754.aspx:“唯一不会导致堆栈遍历的请求是链接请求,它只检查直接调用者。” @George2:此链接中有一个很好的示例:msdn.microsoft.com/en-us/library/hzsc022c.aspx 阅读第二段。此检查在程序集之间进行。

以上是关于这个安全警告是啥意思(.Net Process 类)?的主要内容,如果未能解决你的问题,请参考以下文章

参考 tkinter 这个警告是啥意思?

animator.startAnimation -- 这个警告是啥意思?

@SuppressWarnings是啥意思?

Wse这个是啥意思

C4250 VC++ 警告是啥意思?

这个错误是啥意思?模拟器:FramebufferData::restore: 警告:纹理被删除而不解除绑定 FBO