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 分析センターのアプリケーション ビルド スキャン結果のトリアージ欠陥セクションで入手できます)。一部の 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 に答える