我正在使用spring控制器,在那里我有方法可以下载文件。

控制器方法用于下载文件,我正在以此设置文件名。

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


文件名来自contrller方法,方法看起来像..

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


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

最佳答案

您应该(至少)不确定:


报告名称不包含/或..字符
报告名称不包含任何CRLF字符
reportname是真实的文件名(可能其中不包含。),是指OS实施的文件名以添加白名单表达式。


有关更多信息和解决方案,请参阅OWASP的Input Validation

07-24 19:18