CWE 73 错误 - Veracode 问题 - .net 应用程序

use*_*261 6 .net c# veracode

我在解决我的项目中的 Veracode 扫描仪预约问题时遇到了问题。我创建了一个函数来验证文件,但它没有通过 veracode 扫描仪;

这是我的函数的代码:

    public static string GetSafeFileName(string fileNameToValidate)
    {
        fileNameToValidate= fileNameToValidate.Replace("'", "''").Replace(@"../", "").Replace(@"..\", "");
        char[] blackListChars = System.IO.Path.GetInvalidPathChars();
        char[] blackListFilename = System.IO.Path.GetInvalidFileNameChars();

        foreach (var invalidChar in blackListChars)
        {
            if (fileNameToValidate.Contains(invalidChar))
            {
                fileNameToValidate = fileNameToValidate.Replace(invalidChar, ' ').Trim();
            }
        }

        string fullPath = Path.GetFullPath(fileNameToValidate);

        string directoryName = Path.GetDirectoryName(fullPath);
        string fileName = Path.GetFileName(fullPath);

        foreach (var invalidChar in blackListFilename)
        {
            if (fileName.Contains(invalidChar))
            {
                fileName = fileName.Replace(invalidChar, ' ').Trim();
            }
        }

        string finalPath = Path.Combine(directoryName, fileName);
        return finalPath;

    }
Run Code Online (Sandbox Code Playgroud)

为了修复 Veracode 扫描仪中的 cwe 73 预约,我需要进行哪些更改?有人可以帮助我吗?

我的项目是在.net 4.0上运行的Windows窗体

谢谢,

布鲁诺

xyz*_*xyz 2

我试图解决类似的问题,但在java上下文中。我们使用 ESAPI 作为外部库。您可以查看 esapi 项目(了解如何在项目中实现更好的解决方案): https: //github.com/ESAPI/esapi-java-legacy

实际上使用 esapi 验证器并没有解决 veracode 的问题,但在我看来降低了攻击的风险。使用这样的库,您可以确保用户无法从父文件夹中读取文件(您必须对这样的目录进行硬编码)并且用户无法读取具有不正确扩展名的文件 - >您可以添加这样一个带有文件扩展名的列表。但是这个库不能保证您不能操作父目录中具有允许的扩展名的文件。

因此,如果您认为所有需要的文件路径验证都已完成,则必须要求通过设计进行缓解或开发一个包含项目中所有所需文件资源的映射,以确保用户无法操纵外部文件。

另外,如果您认为您已经创建了良好的文件路径验证,您可以使用清理注释来标记您的方法。在这里您可以阅读有关定制清洁剂的更多信息 https://help.veracode.com/reader/DGHxSJy3Gn3gtuSIN2jkRQ/xrEjru~XmUHpO6~0FSae2Q