我正在使用 spring Controller ,我有方法下载文件。
Controller 方法用于下载文件,我将文件名设置为这样..
response.setHeader("Content-disposition", "attachment;filename=" + reportname+ ".csv");
其中文件名来自 Controller 方法,方法看起来像..
@RequestMapping(value = "/{reportname}")
public void downloadCSV(HttpServletResponse response, @PathVariable(name="reportname",required=true) @NotBlank String reportname)
throws IOException {
我在 checkmarx 中得到的是这样的。报告名称参数 。然后,该元素的值在没有经过适当清理或验证的情况下流经代码,并最终在 downloadCSV 中的 HTTP 响应 header 中使用 在某些无法缓解此攻击的旧版本中,这可能会引发 HTTP 响应拆分攻击。
最佳答案
您应该(至少)不确定:
- 报告名称不包含/或 .. 字符
- 报告名称不包含任何 CRLF 字符
- reportname 是一个真实的文件名(可能不包含 .),指的是文件名的操作系统实现,以添加白名单表达式。
参见Input Validation从 OWASP 获取更多信息和解决方案
关于java - 防止 Java 中的 HTTP 响应拆分攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58539396/