【问题标题】:Prevent an HTTP Response Splitting attack in Java防止 Java 中的 HTTP 响应拆分攻击
【发布时间】:2019-10-24 10:30:47
【问题描述】:

我正在使用 spring 控制器,我有方法 get 下载文件。

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

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 响应拆分攻击。

【问题讨论】:

  • 允许调用者决定文件名的设计看起来很糟糕。
  • “没有经过适当的清理或验证” - 你为什么不改变它?你到底要什么?

标签: java spring-boot servlets spring-rest checkmarx


【解决方案1】:

你应该(至少)不确定:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多