0

我正在使用弹簧控制器,我有方法获取下载文件。

控制器方法用于下载文件,我将文件名设置为此..

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 中得到的是这个。报告名称参数。然后,此元素的值在未经过适当清理或验证的情况下流经代码,并最终在 downloadCSV 中的 HTTP 响应标头中使用。在某些无法缓解此攻击的旧版本中,这可能会启用 HTTP 响应拆分攻击。

4

1 回答 1

0

您应该(至少)不确定:

  • 报告名称不包含 / 或 .. 字符
  • 报告名称不包含任何 CRLF 字符
  • reportname 是一个真实的文件名(可能不包含 . 在其中)引用您的文件名的操作系统实现以添加白名单表达式。

有关更多信息和解决方案,请参阅OWASP 的输入验证

于 2019-11-14T10:41:06.770 回答