2017-11-27 3 views
1

원하는 출력 형식으로 아래 코드 스 니펫을 사용하여 JasperReports를 사용하여 PDF를 생성 할 수 있습니다.checkletx에서 Servletoutputstream.write로 인한 XSS 취약점

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

나는 그것이 내가 HtmlUtils.htmlEscape 여전히 같은 문제에 직면을 사용하여 모든 입력 매개 변수를 탈출 코드 아래에이 문제를 해결하기위한 XSS 취약점을 반영 보여줍니다 checkmarx를 사용하여 내 코드를 스캔 그러나 때.

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

본인은 나의 끝에서 분석하고 소독 전체 byte[]을 시도했지만 어떻게 든 손상 PDF 형식과 사용자가 PDF의 inresponse을받지 않습니다.

어떤 도움을 찾고 있습니다. 포인터를 사용해 주셔서 감사합니다. 미리 감사드립니다.

+0

의심되는 코드의 흐름을 볼 수 있도록 코드의 상당 부분을 추가 할 수 있습니까? 예를 들어 사용자가 제공하는 매개 변수가있는 경우 또한, outputStream은 무엇입니까? – yaloner

+0

거짓 표시로 표시하거나 스트림으로 직접 내 보냅니다. –

+0

@PetterFriberg 좀더 자세히 설명해 주시겠습니까? Jasper 보고서 – Gautam

답변

1

스트림에 PDF 파일을 쓰는 경우 HTML 파일이 아니기 때문에 데이터의 HTML 인코딩이 없어야합니다. application/pdf content-type 헤더를 사용하여 PDF를 출력 스트림에 그대로 씁니다.

Checkmarx에서 사용자가 PDF 파일을 작성하는 것을 볼 수 없으므로 잘못된 보고서를 제공 할 수 있습니다.