如何在下载文件时修复veracodecwe-80xss问题?

nbysray5  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(293)

下面是我现有的java基本标准代码,您可以看到,我只是使用输出流下载文件。
我只使用request参数从头部获取浏览器详细信息来生成文件名,然后再次对其进行解码。
所以现在我不明白下面的代码
outputstream.write(数据,0,已读);
会导致xss问题吗?
那么,我如何解决这个问题,因为我的输出是一个简单的文件?

OutputStream outputStream = httpResponse.getOutputStream();
        InputStream fileInputStream = generateInputStreamObj(user, attachmentObj, false, httpRequest, servletContext, ipAddress);

        String userAgent = httpRequest.getHeader("User-Agent");
        String encodedFileName = generateFileName(userAgent, attachmentObj);

        int downloadBufferSize = Integer.parseInt(CacheManagement.getInstance().getSystemPropertyByAlias().get("DOWNLOAD_BUFFER_SIZE").getPropertyValue());

        httpResponse.setContentType("application/x-download");
        httpResponse.setHeader("Content-Length", String.valueOf(attachmentObj.getDocumentSize()));
        httpResponse.setHeader("Content-Disposition", "attachment; filename=\"" + encodedFileName + "\"");
        httpResponse.setBufferSize(downloadBufferSize);

        bufferInputStream = new BufferedInputStream(fileInputStream);
        byte[] data = new byte[downloadBufferSize];
        int readed = 0;
        while ((readed = bufferInputStream.read(data)) != -1)
        {
            outputStream.write(data, 0, readed);
        }

我检查堆栈溢出和veracode的答案,但这对我没有帮助。

**如果你要把这个问题改成负数,请发表评论。我回顾了stackoverflow和veracode社区答案,但它没有回答我的问题。

cbwuti44

cbwuti441#

veracode可能看到您没有进行任何编码,并认为这可能是xss问题。
不过,在本例中,不需要编码,因为这是一个文件下载,而不是生成html数据。浏览器不会将结果解释为包含这些内容类型和标题的html,因此这是一个误报警告。

alen0pnh

alen0pnh2#

转换

< → &lt;

> → &gt;

' → &#39;

" → &quot;

& → &amp;

代码:

public static final String stringToHtmlString(String s){
   StringBuffer sb = new StringBuffer();
   int n = s.length();
   for (int i = 0; i < n; i++) {
      char c = s.charAt(i);
      switch (c) {
         case '<': sb.append("&lt;"); break;
         case '>': sb.append("&gt;"); break;
         case '&': sb.append("&amp;"); break;
         case '"': sb.append("&quot;"); break;
         default:  sb.append(c); break;
      }
   }
   return sb.toString();
}

相关问题