CWE 73错误 - Veracode Issue -.net application

时间:2018-01-26 16:42:16

标签: c# .net veracode

在我的项目中解决Veracode Scanner的预约问题我一直有问题。我创建了一个函数来验证文件,但它没有通过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;

    }

我必须修改Veracode扫描仪中的cwe 73预约有哪些变化?有人可以帮帮我吗?

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

谢谢,

布鲁诺

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:2)

你的问题是Veracode实际上没有检测到你的代码在做什么,它检测到正在调用(或不调用)什么清理函数。如果您登录Veracode并在“支持的清洁功能”上搜索帮助,您将找到以您的语言检测到的列表。

不幸的是,.Net的列表中没有包含CWE-73的任何内容。

因此,您的解决方案是使用自定义清洁剂注释将您的功能标记为CWE-73的清洁剂。搜索Veracode帮助“注释自定义清洁剂”。

using Veracode.Attributes;

[FilePathCleanser]
public static string GetSafeFileName(string fileNameToValidate)
   {
    ...

也就是说,您的实现不安全。尝试传入“C:\ Windows \ System32 \ notepad.exe”作为要写入的文件名,您将看到问题所在。

黑名单只能处理您的期望。白名单是一种更强大的方法。您的方法应基于目录白名单,文件名字符白名单和文件扩展名白名单。