java - 防止 Java 中的 HTTP 响应拆分攻击

标签 java spring-boot servlets spring-rest checkmarx

我正在使用 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/

相关文章:

java - 如何跟踪 Java servlet 的执行情况?

java - System.exit(0); 之间的区别和 Platform.exit();?

java - JButton 图标有点偏离

java - 如何将 Apache Tiles 集成到 Spring Boot Web 应用程序中?

java - 使用java中的过滤器记录servlet请求和响应的内容大小

url - Struts2 - 从错误页面获取 url

java - 简单 JSP - 根据 TLD,标签的属性无效

java - 创建现有对象的 Java 数组

mysql - Spring Boot 和数据库初始化 - 找不到 data.sql

java - 无法推断基本网址。这在使用动态 servlet 注册或 API 位于 API 网关 swagger 2.10.5 之后时很常见