【发布时间】:2012-06-12 13:06:47
【问题描述】:
我正在针对我的模块的代码审核报告修复问题。问题是 XSS 漏洞。 它报告了语法问题 response.getOutputStream().write(buffer); 如何解决? 我做了足够的功课,发现 OWASP 推荐的 ESAPI 可以帮助我修复它,但是如何实现呢?问题出在 servlet 类中? 或任何其他api或其他任何东西可以帮助我修复它? 请分享您的相关经验。
FileOutputStream fos = null;
FileInputStream fileInuptStream =null;
BufferedInputStream bufferedInputStream = null;
ByteArrayOutputStream byteArrayOutputStream =null;
try{
ServletContext servletContext = request.getSession().getServletContext();
File attachmentDir = new File(servletContext.getRealPath("")+File.separator+"Reports" );
String uploadDir=attachmentDir.getPath();
if (!attachmentDir.exists()) {
attachmentDir.mkdirs();
}
HSSFWorkbook wb= new HSSFWorkbook();
AAAA aaa=new AAAA();
wb=aaa.getExportXLS(request, response, fileName, wb);
if(request.getSession().getAttribute("SESSION_AAAAA")!=null){
request.getSession().removeAttribute("SESSION_AAAAA");
}
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();
int start = INT_ZERO;
int length = ONE_ZERO_TWO_FOUR;
int offset = MINUS_ONE;
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); --- REPORTED AT THIS LINE
response.getOutputStream().flush();
【问题讨论】:
-
没有代码很难确定需要更改的内容...如果您发布一些代码可能会更好地解决您的问题。
-
上下文是什么?我不敢相信他们(工具)只是抱怨这一行代码?
-
@home:可以,如果你只是在输出流中写一段html代码而不考虑动态数据的转义,你会遇到麻烦。
-
@tom:我同意,这就是我所说的“上下文”。
-
审计报告说在第 no 行有语法 response.getOutputStream().write(buffer);是 xss 脆弱的。报告有消息“从文件(“缓冲区”)注入数据到 servlet 响应(可能的 XSS 攻击)。 java 类是用于以 xls 格式导出报告格式的 servlet。具有上述语法的方法的代码如下