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

问题描述 投票:1回答:2

以下是aspx文件中的c#代码,它获取pdf文件并下载。为了生成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响应以进行文件下载?

c# asp.net static-code-analysis veracode
2个回答
1
投票

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


1
投票

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

这缓解了Veracode Analysis强调的问题,并且修复程序已经通过了静态代码分析。

© www.soinside.com 2019 - 2024. All rights reserved.