Я использую Tomcat8/JavaБезопасно позволяют пользователю генерируемые файлы, которые будут загружены с сервера
Я в настоящее время позволяют чувствительных сгенерированных пользователем файлов Excel (созданных в Java/POI), которые будут загружены с сервера путем создания имени файла с GUID, а затем сохраните его в общедоступном каталоге и предоставив ссылку для этого файла.
Стадия 1
Пользователь выбирает различные параметры, которые СПЯ посылает в файл 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();
}
Стадия 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 уже обслуживаются сервлетом (Catalina DefaultServlet). Таким образом, ответ на этот вопрос требует лучшего понимания того, что на самом деле обнаружение безопасности (по сравнению с предлагаемым решением поиска) –
Я немного изменил свой вопрос в отношении проблем безопасности – gordon613
«однако мне все равно нужно сохранить документ на сервере» .... это утверждение не обязательно верно (или рассуждения о том, почему это было бы правдой, не ясно). Если вы на самом деле генерировали XLSX «на лету» (т. Е. Вызванный HttpServletRequest), вместо того, чтобы записывать Workbook в FileOutputStream, вы должны записать его в OutputStream HttpServletResponse. например new Workbook(). write (httpServletResponse.getOutputStream()) Для этого есть немного больше, чем это, но если этот подход кажется жизнеспособным, я напишу подробности в форме ответа –