Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CWE 73错误-Veracode问题-.net应用程序_C#_.net_Veracode - Fatal编程技术网

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

C# CWE 73错误-Veracode问题-.net应用程序,c#,.net,veracode,C#,.net,Veracode,在我的项目中,我一直在解决Veracode扫描仪的预约问题。我创建了一个函数来验证一个文件,但它没有传入VeracodeScanner 以下是我的函数代码: public static string GetSafeFileName(string fileNameToValidate) { fileNameToValidate= fileNameToValidate.Replace("'", "''").Replace(@"../", "").Replace(@".

在我的项目中,我一直在解决Veracode扫描仪的预约问题。我创建了一个函数来验证一个文件,但它没有传入VeracodeScanner

以下是我的函数代码:

    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 scanner中修复cwe 73预约时,我需要做哪些更改?有人能帮我吗

我的项目是运行在.NET4.0上的windows窗体

谢谢


Bruno

我试图在java环境中解决类似的问题。我们使用ESAPI作为外部库。您可以回顾esapi项目(了解如何在项目中实现更好的解决方案的想法):

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

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

此外,如果您认为您已经创建了一个良好的文件路径验证,那么可以使用Cleaner注释来标记您的方法。在这里你可以阅读更多关于定制清洁剂的信息

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

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

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

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


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

这篇文章很好,为我指明了正确的方向,但我认为该属性有点错误,应该是FilePathCleaner,正如网站上的这篇文章感谢Steve,剪切和粘贴的乐趣。
using Veracode.Attributes;

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