2

我可以在下面的代码片段的帮助下使用 JasperReports 以所需的输出格式生成 PDF。

Map<String, Object> parameters = new HashMap<>();
parameters.put("code", HtmlUtils.htmlEscape(request.getParameter("code")));
JasperPrint jasperPrint = JasperFillManager.fillReport(path, parameters, dataSource);
barcodePdfBytes = JasperExportManager.exportReportToPdf(jasperPrint);

但是,当我使用 checkmarx 扫描我的代码时,它显示了下面代码片段的反射 XSS 漏洞,为了解决这个问题,我使用了所有输入参数, HtmlUtils.htmlEscape但仍然面临同样的问题。

ServletOutputStream outputStream = response.getOutputStream();    
outputStream.write(barcodePdfBytes, 0, barcodePdfBytes.length);

我从我的最后进一步分析并尝试对整个文件进行消毒byte[],但它以某种方式损坏了 PDF 格式,并且用户没有得到 pdf 响应。

在这里寻求帮助。不胜感激任何指针。提前致谢。

4

1 回答 1

1

如果您正在将 PDF 文件写入流,则不应对数据进行任何 HTML 编码,因为它不是 HTML 文件。使用 application/pdf 内容类型标头将 PDF 按原样写入输出流。

Checkmarx 可能看不到您正在编写 PDF 文件,因此可能会提供虚假报告。

于 2017-11-27T21:56:06.040 回答