0
    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);

我有这段代码。在具有语法 response.getOutputStream().write(buffer); 的行处 报告了一个问题,它容易受到 xss 攻击。该报告来自客户端的代码审计工具。传递的消息说“将数据从文件(“缓冲区”)注入到 servlet 响应(可能的 XSS 攻击)”。我不知道如何解决?提前致谢。

工作了几个小时后,我了解到报告的问题是文件下载注入。解决方案在于使用 ESAPI 的方法

ESAPI.httpUtilities().setHeader().

但我想在两个地方和一篇研究论文中了解有关该方法的更多信息和使用细节

ESAPI.httpUtilities().safeSetHeader("Content-Disposition",
"attachment; filename=" + fn );

并且不存在上述方法的实现,而是他们建议使用 setHeader 方法。是否有人对此类问题和实施的解决方案有任何先前的经验。请分享您的经验/解决方案/建议。

4

1 回答 1

0

需要大量验证。问题在于请求作为从数据库中检索数据的方法中的输入。它可以发起攻击。在将其写入响应之前验证文件名和其他输出。

于 2012-06-29T10:16:53.770 回答