下面是我现有的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社区答案,但它没有回答我的问题。
2条答案
按热度按时间cbwuti441#
veracode可能看到您没有进行任何编码,并认为这可能是xss问题。
不过,在本例中,不需要编码,因为这是一个文件下载,而不是生成html数据。浏览器不会将结果解释为包含这些内容类型和标题的html,因此这是一个误报警告。
alen0pnh2#
转换
代码: