Предотвращение атаки разделения ответа HTTP в Java

Я использую контроллер Spring, где у меня есть метод загрузки файла.

метод контроллера используется для загрузки файла, и я устанавливаю имя файла как это..

response.setHeader("Content-disposition", "attachment;filename=" + reportname+ ".csv");

где имя файла происходит от метода контроллера, метод выглядит так..

@RequestMapping(value = "/{reportname}")
    public void downloadCSV(HttpServletResponse response, @PathVariable(name="reportname",required=true) @NotBlank String reportname)
            throws IOException {

что я получаю в checkmarx это. имя отчета параметр . Затем значение этого элемента проходит через код без надлежащей очистки или проверки и в конечном итоге используется в заголовке ответа HTTP в downloadCSV. Это может активировать атаку разделения ответа HTTP в некоторых более старых версиях, которые не смягчают эту атаку.


person Sanjay Rabari    schedule 24.10.2019    source источник
comment
Похоже на плохой дизайн, позволяющий вызывающей стороне выбирать имя файла.   -  person Kayaman    schedule 24.10.2019
comment
без надлежащей дезинфекции или проверки - когда вы не измените это? Что именно вы просите?   -  person f1sh    schedule 24.10.2019


Ответы (1)


Вы должны быть уверены (по крайней мере), что:

  • имя отчета не содержит символ / или ..
  • имя отчета не содержит символов CRLF
  • имя отчета является реальным именем файла (возможно, не содержит . в нем) обратитесь к реализации имени файла в вашей ОС, чтобы добавить выражение для внесения в белый список.

См. проверку ввода от OWASP для получения дополнительной информации и решений.

person SPoint    schedule 14.11.2019