Veracode - 对HttpResponse BinaryWrite的XSS攻击。该如何修复?

时间:2018-01-29 09:02:57

标签: c# asp.net static-code-analysis veracode

以下是获取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可利用性:中性类别:中和不当   网页中与脚本相关的HTML标记(基本XSS)

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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