xss issue-- 将文件("buffer")中的数据注入到 servlet 响应。 文件下载注入案例


    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方法。是否有人以前对此类问题和实施的解决方案有任何经验。请分享您的经验/解决方案/建议。

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

最新更新