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

私はこのコードを持っています。構文が response.getOutputStream().write(buffer); の行。xss 攻撃に対して脆弱であるという問題が報告されています。レポートは、クライアント側のコード監査ツールからのものです。配信されるメッセージには、「ファイル (「バッファー」) からサーブレット応答へのデータの注入 (XSS 攻撃の可能性)」と書かれています。修正方法がわかりませんか?前もって感謝します。

さらに数時間作業した後、報告された問題がファイル ダウンロード インジェクションであることがわかりました。そして解決策は、メソッドを使用したESAPIにあります

ESAPI.httpUtilities().setHeader().

しかし、私はこの方法について2つの場所と研究論文で知ったように、この方法に関するより多くの情報と使用法の詳細が必要です

ESAPI.httpUtilities().safeSetHeader("Content-Disposition",
"attachment; filename=" + fn );

上記のメソッドの実装は存在せず、setHeader メソッドを提案しています。この種の問題と実装されたソリューションについて、以前に経験したことがある人はいますか。あなたの経験/解決策/提案を共有してください。

4

1 に答える 1

0

多くの検証が必要です。問題は、データベースからデータを取得するメソッドの入力としてのリクエストにあります。攻撃を開始できます。応答に書き込む前に、ファイル名とその他の出力を検証します。

于 2012-06-29T10:16:53.770 に答える