4

我们的客户端使用 Veracode 扫描工具来扫描 ASP.NET 应用程序。除了以下问题,我们已经解决了许多缺陷。

Improper Neutralization of CRLF Sequences in HTTP Headers ('HTTP Response Splitting')
(CWE ID 113)(1 flaw) in the line  

HttpContext.Current.Response.AddHeader("Content-Disposition", contentDisposition);

这是对应的代码:

public static void DownloadFile(string fileName, byte[] dByteData, bool isNoOpen = false)
        {

            byte[] fileContents = new byte[] { };
            string contentDisposition = string.Empty;
            fileContents = dByteData;
            if (string.IsNullOrWhiteSpace(fileName))
            {
                return;
            }
            fileName = fileName.Replace("\n", "").Replace("\r", "");
            string contentType = "application/*.".Replace("\n", "").Replace("\r", "");
            contentDisposition = "attachment; filename=\"" + HttpContext.Current.Server.UrlPathEncode(fileName) + "\"";//While Downloading file - file name comes with junk characters
            contentDisposition= contentDisposition.Replace("\n", "").Replace("\r", "");
            HttpContext.Current.Response.Buffer = true;
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.ClearHeaders();
            HttpContext.Current.Response.Charset = "";
            HttpContext.Current.Response.ContentType = contentType;
            if (isNoOpen)
            {
                HttpContext.Current.Response.AddHeader("X-Download-Options", "noopen");
            }
            HttpContext.Current.Response.AddHeader("Content-Disposition", contentDisposition);
            HttpContext.Current.Response.AddHeader("Content-Length", fileContents.Length.ToString());
            HttpContext.Current.Response.BinaryWrite(fileContents.ToArray());

            HttpContext.Current.Response.End();
            HttpContext.Current.Response.Flush();
            HttpContext.Current.ApplicationInstance.CompleteRequest();
        }

文件名或路径的外部控制 (CWE ID 73)

if (File.Exists(filePath))
            {
                File.Delete(filePath);
            }

它显示错误File.Delete。我们已经尝试清理文件路径并且也使用过Path.GetFullpath,但只是徒劳无功。

4

4 回答 4

1

很多时候,像 Veracode 这样的工具并不了解您已经清理了您的内容这一事实。它似乎缺少您的 Replace() 调用。我会将这一发现标记为误报并继续前进。

于 2013-04-20T07:12:40.607 回答
1

您可以通过调用堆栈分析获得有关缺陷来源的更多详细信息(可在 Veracode 分析中心的应用程序构建扫描结果的 Triage 缺陷部分获得)。如果没有这些信息,一些 Veracode 缺陷的起源很难理解。

于 2012-12-23T17:48:21.013 回答
1

对于文件名或路径的外部控制 (CWE ID 73):

使用以下内容进行验证filePath

public ValidatePath(string path) {
    var invalidPathCharacters = System.IO.Path.GetInvalidPathChars();
    foreach (var a in path)
    {
        if (invalidPathCharacters.Contains(a))
        {
            throw new Exception($"Character {a} is an invalid path character for path {path}");
        }
    }
}

Veracode 在我们上次的扫描中很满意。

于 2017-05-23T18:59:02.240 回答
0

使用 veracode filepathcleanser 属性。见https://help.veracode.com/reader/DGHxSJy3Gn3gtuSIN2jkRQ/CWbscOAsMPyIXqASkLRTnw

于 2020-04-13T06:15:44.237 回答