Veracode - 对 HttpResponse BinaryWrite 的 XSS 攻击。应该怎么修?

Veracode - XSS Attack on HttpResponse BinaryWrite. How should it be fixed?

以下是获取pdf文件并下载的aspx文件中的c#代码。要生成 pdf,API 服务器会得到一个 html 模板内容。

using (HttpClient client = new HttpClient())
{

    var apiUrl = <APIServer> + "/api/GetPdfByteData";
    client.BaseAddress = new Uri(apiUrl);

    Template template = GetTemplate(); //Body property has got the HTML template
    string templateBody = template.Body;//html template 

    var values = new Dictionary<string, string>();
    values.Add("html", templateBody);

    var jsonStr = JsonConvert.SerializeObject(values);
    var stringContent = new StringContent(jsonStr, Encoding.UTF8, "application/json");

    //uses an API service to get the pdf content for the template 
    var response = client.PostAsync(apiUrl, stringContent).Result; //VERACODE - Basic XSS STARTED here
    var pdfContent = response.Content.ReadAsByteArrayAsync().Result;

    if (response.IsSuccessStatusCode)
    {
        Response.ContentType = "application/octet-stream";
        Response.Clear();
        Response.BinaryWrite(pdfContent);//VERACODE - this line has been highlighted for the XSS ENDED HERE 
        Response.AddHeader("Content-Length", pdfContent.Length.ToString());
        Response.AppendHeader("content-disposition", string.Format("attachment;FileName=\"testfile.pdf\""));
        Response.End();
    }
}

以下为中等严重性警告。

CWD ID:80 Exploitability: Neutral Category: Improper Neutralization of Script-Related HTML Tags in a Web Page (Basic XSS)

该应用程序还为所有响应设置了内容安全策略

如何安全地处理带有字节数组的 API 响应,以便在没有任何安全漏洞的情况下下载文件?

理论上,您应该清理从 /api/GetPdfByteData 获得的输出。在您的代码片段中,来自 API 的响应仅用作您的服务的响应,但可能包含不受信任的数据。
在您的情况下,响应不会在浏览器中呈现,因此您没有 XSS 风险,但您仍然有在 PDF 中插入不需要的数据的风​​险。例如,这些不需要的数据可能会利用 PDF 查看器中的某些漏洞(例如缓冲区溢出)。
主要信息是确保您检查 PDF 中包含的内容。如果您直接在 PDF 中传递用户输入,您可能会有异味。如果您完全控制 API /api/GetPdfByteData,安全地传输响应并且已经检查了确定 API 响应的输入,那么您已经缓解了那里的问题,您可以忽略此警告.

我添加了一段代码将数据存储在安全的临时目录中,并对目录中的文件进行扫描。这是为了确保在流式传输文件以进行下载操作之前没有易受攻击或不需要的数据。

这缓解了 Veracode 分析突出显示的问题,并且修复程序已经通过了静态代码分析。