からダウンロードすることが確実にできるようGUIDを使用して公開されているディレクトリに保存し、このファイルへのリンクを提供します。は、私は現在、(Javaの/ POIで作成)に敏感なユーザーが生成したExcelファイルは、ファイル名を作成することにより、サーバからダウンロードできるように、私は <p>Tomcat8/Javaの</p>を使用するユーザーが生成したファイルをサーバー
ステージ1
ユーザーがJSPは、Javaファイルに送信する様々なパラメータを、選択
String fileName = "excelFiles/"
+ myReports
.createExcel(listCompanyDetails);
public static String createExcel(List listCompanyDetails) {
String fileName = "MyFile"+UUID.randomUUID() + ".xls";
String fileFullPath="\..."+fileName;
FileInputStream inputStream = new FileInputStream(new File(APPCodeTable.templateExcelFile));
Workbook wb=new HSSFWorkbook(inputStream);
FileOutputStream out = new FileOutputStream(fileFullPath);
wb.write(out);
out.close();
}
ステージJSP次いでiframe内のファイルを表示する2
<iframe id="target_upload" name="target_upload" width="100%"
src="<%=fileName%>" height="100%"></iframe>
私たちのシステムで行われた侵入テストの結果では、代わりにjspファイルからストリームでファイルを生成する必要があります。これはGUIDの使用を避けるため、より安全です。ログイン許可をバイパスするファイルへのリンク。
ただし、サーブレットを使用する方がコード作成の方が優れているようです。例えば、Implementing a simple file download servlet。
ドキュメントをサーバーに保存し、GUIDで識別し、このGUIDをサーブレットに渡すことを検討していました。しかし、これは私の本来のセキュリティ向上意向を打ち破っているようです。
単純なダウンロードサーブレット(添付リンクのように)を実装すると、作成したファイルをそのサーブレットの中にどのようにして入れることができますか?
単に任意のセキュリティ問題に対処していないようですサーブレットを介してこれをストリーミング - 特に静的なres Tomcatを介して提供されるourcesは、サーブレット(catalina DefaultServlet)によってすでに提供されています。だから、この質問に答えるには、セキュリティの発見が実際に何であるかをよりよく理解する必要があります(対照解の提案された解決策)。 –
私はセキュリティ問題に関して少し質問を更新しました – gordon613
"しかし、このステートメントは必ずしも真実ではありません(または、それが真実である理由の裏にある理由は明らかではありません)。実際にXLSXを「オンザフライで」生成している場合(つまり、HttpServletRequestによって起動された場合)、WorkbookをFileOutputStreamに書き出す代わりに、HttpServletResponseのoutputStreamに書き出すことになります。例えば新しいWorkbook()。write(httpServletResponse.getOutputStream())これよりももう少しですが、このアプローチが実行可能なように見える場合は、回答の形で詳細を書きます。 –