【问题标题】:Veracode - XSS Attack on HttpResponse BinaryWrite. How should it be fixed?Veracode - 对 HttpResponse BinaryWrite 的 XSS 攻击。应该如何修复?
【发布时间】:2018-07-07 22:22:17
【问题描述】:

以下是获取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 响应以进行文件下载?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我同意你的看法。是的,/api/GetPdfByteData 是另一个内部安全 API,它返回 Bytedata。我最初想了解的是“是否有一种安全的方法来清理字节数据(类似于HtmlEncode 用于清理用户输入数据的方式)以减轻此警告?”。我想,我需要使用 Veracode 来安全地忽略此警告。感谢您的回复,@hermi
      猜你喜欢
      • 1970-01-01
      • 2023-01-24
      • 1970-01-01
      • 2014-09-12
      • 2013-09-16
      • 1970-01-01
      • 2016-02-05
      • 2022-01-08
      • 2011-02-16
      相关资源
      最近更新 更多