使用Process.Start修复CA2122

Stu*_*ler 3 c# vb.net security fxcop code-access-security

在应用程序中,我们可以将报告输出为csv文件并加载它,类似于以下代码:

Process.Start("C:\MyReport.csv") ' Not real path 
Run Code Online (Sandbox Code Playgroud)

运行代码分析时,会产生以下错误:

CA2122不要将具有链接需求"Form.Function(Definition)"调用的方法间接暴露给具有LinkDemand的"Process.Start(String)".通过进行此调用,'Process.Start(String)'间接暴露给用户代码

我已经看到用某个地方来标记装配SecurityTransparentAttribute,这是否只是压制了消息?如果是这样,这不是我想要的.是否有另一种打开文件的方法可以绕过这个消息而不会抑制它?如果我现在不能在其他任何地方使用Excel,我最好还是避免使用Excel自动化.

想法?

Ham*_*hid 7

我今天偶然发现了同样的问题,并认为以下答案对其他人如此有用是如此.

所以基本上,我的代码是在资源管理器中打开一个给定的目录路径,如下所示

public static void OpenDirectoryPath(string directoryPath)
{
    if (Directory.Exists(directoryPath))
    {
        Process.Start(directoryPath);
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码产生了以下错误

CA2122:Microsoft.Security:'Helper.OpenDirectoryPath(string)'调用具有LinkDemand的'Process.Start(string)'.通过进行此调用,'Process.Start(string)'间接暴露给用户代码.查看以下可能提供绕过安全保护的方法的调用堆栈:

要问的问题是,你真的希望这种方法公开吗?就我而言,答案是"不".将方法更改为内部解决了问题.

internal static void OpenDirectoryPath(string directoryPath)
{
    if (Directory.Exists(directoryPath))
    {
        Process.Start(directoryPath);
    }
}
Run Code Online (Sandbox Code Playgroud)