FileOutputStream fos;
HSSFWorkbook wb= new HSSFWorkbook();
wb=aaaaa.getExportXLS(request, response, fileName, wb);
fos=new FileOutputStream(uploadDir+File.separator+fileName);
wb.write(fos);
File fileXls=new File(uploadDir+File.separator+fileName);
fileInuptStream = new FileInputStream(fileXls);
bufferedInputStream = new BufferedInputStream(fileInuptStream);
byteArrayOutputStream = new ByteArrayOutputStream();
byte [] buffer = new byte [length];
while ((offset = bufferedInputStream.read(buffer, start, length)) != -1)
byteArrayOutputStream.write(buffer, start, offset);
buffer = byteArrayOutputStream.toByteArray();
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/xls");
response.setHeader("Content-disposition","attachment; filename="+fileName );
response.setContentLength((int ) fileXls.length());
response.getOutputStream().write(buffer);
我有这段代码。 在具有语法响应的行.getOutputStream().write(buffer); 报告了一个问题,即它容易受到 XSS 攻击。 该报告来自客户端的代码审核工具。 传递的消息说"将数据从文件("缓冲区")注入到 servlet 响应(可能的 XSS 攻击)"。我不知道如何解决它?提前谢谢。
再工作几个小时后,我明白报告的问题是文件下载注入。解决方案在于使用该方法的ESAPI
。ESAPI.httpUtilities().setHeader().
但是我想在两个地方了解有关此方法的更多信息和使用详细信息,并且在一篇研究论文中,我开始了解该方法
ESAPI.httpUtilities().safeSetHeader("Content-Disposition",
"attachment; filename=" + fn );
并且不存在上述方法的实现,而是建议使用setHeader方法。是否有人以前对此类问题和实施的解决方案有任何经验。请分享您的经验/解决方案/建议。
需要大量的验证。问题在于请求作为从数据库中检索数据的方法中的输入。它可以发起攻击。在将文件名和其他输出写入响应之前对其进行验证。