2017-11-27 4 views
1

以下のコードスニペットを使用してJasperReportsを使用してPDFを生成することができます。checkmarxを使用した場合の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); 

私はcheckmarxを使用して自分のコードをスキャンするときしかし、それはコードスニペット以下に反映XSSの脆弱性を示し、私は HtmlUtils.htmlEscapeを使用して、すべての入力パラメータを免れたが、それでも同じ問題に直面しているこの問題を解決します。

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

私はさらに私の端から分析し、消毒全体byte[]にしようとしたが、それは何らかの形で破損しているPDF形式およびユーザーは、PDF応答してを取得されていません。

ここでいくつかの助けを探しています。ポインタをありがとうございます。 ありがとうございました。

+0

コードの大部分を追加して、疑わしいコードの流れを確認できますか?たとえば、ユーザーからのパラメータがあるとします。また、outputStreamとは何ですか? – yaloner

+0

偽陽性としてマークするか、ストリームに直接エクスポートします。 –

+0

@PetterFribergもっと詳しく教えてもらえますか?私はJasperのレポート – Gautam

答えて

1

ストリームにPDFファイルを書き込む場合、HTMLファイルではないため、データのHTMLエンコードは行わないでください。 application/pdf content-typeヘッダーを使用して、そのままPDFを出力ストリームに書き込みます。

Checkmarxは、PDFファイルを作成しているとは見えないかもしれないので、虚偽の報告をすることがあります。

関連する問題