【问题标题】:Header Manipulation issue with HP Fortify in HTTP response [java]HTTP 响应中 HP Fortify 的标头操作问题 [java]
【发布时间】:2016-11-26 04:18:21
【问题描述】:

我正在尝试修复此代码的 HP Fortify 扫描返回的“标题操作”问题。我不知道文件在上传期间是否已经过验证(我认为没有)。我尝试使用 RegEx 验证文件名但没有成功。 任何人都可以帮助我吗?

b = uploadedFiles.getFilecontent().getBytes(1,
                        uploadedFiles.getFilesize().intValue());
                if (b != null) {
                    response.reset();
                    String fileName = uploadedFiles.getFilename();
                    String header = "attachment; filename=\"" + fileName + "\"";
                    String contentType = uploadedFiles.getFilecontenttype();
                    response.setContentType(uploadedFiles.getFilecontenttype());
                    response.addHeader("Content-Transfer-Encoding", "Binary");
                    response.addHeader("Cache-Control", "must-revalidate, private");
                    response.setContentLength(b.length);
                    FileCopyUtils.copy(b, response.getOutputStream());
                    response.getOutputStream().flush();
                    response.getOutputStream().close();
                }

我尝试了什么:

String fileName = uploadedFiles.getFilename();
String regex = "[a-zA-Z._ ]*";
if (b != null && fileName.matches(regex)) {
                response.reset();
                // String fileName = uploadedFiles.getFilename();
                String header = "attachment; filename=\"" + fileName + "\"";
                String contentType = uploadedFiles.getFilecontenttype();
                response.setContentType(uploadedFiles.getFilecontenttype());
                response.addHeader("Content-Transfer-Encoding", "Binary");
                response.addHeader("Cache-Control", "must-revalidate, private");            
                response.setHeader("Content-Disposition", header);
                response.setContentLength(b.length);
                FileCopyUtils.copy(b, response.getOutputStream());
                response.getOutputStream().flush();
                response.getOutputStream().close();
            }

【问题讨论】:

  • 嘿,您找到了可以与 Fortify 一起使用的解决方案吗?

标签: java header http-headers fortify


【解决方案1】:

您应该使用一种方法来过滤

中的敏感信息
response.setHeader("Content-Disposition", header)

只是使用

fileName.matches(regex) 

太简单了。

【讨论】:

    【解决方案2】:
    String contentType = uploadedFiles.getFilecontenttype();
    response.setContentType(uploadedFiles.getFilecontenttype());
    

    首先,您可以在此处修复冗余。 其次,问题可能来自您没有尝试验证内容类型这一事实。如果内容类型已更改并且与文件不匹配怎么办?应该对每个用户输入进行清理和/或与您实际期望的内容白名单进行比较。

    编辑:filename 的同上。清理此字段

    【讨论】:

      【解决方案3】:

      在这种情况下,您可以使用此方法来验证文件名的标头值

      //Header manipulation 
      

      public static String validateHeaders(String header) throws UnsupportedEncodingException{

      String filename = new String(header.getBytes("UTF-8"), "ISO-8859-1");
      String regex = "[`~!@#$%^&*()\\+\\=\\{}|:\"?><\\/r\\/n]";
      Pattern pa = Pattern.compile(regex);
      Matcher ma = pa.matcher(filename);
      if(ma.find()){
          filename = ma.replaceAll("");
      }
         return filename;
      }     
      

      String header = "attachment; filename="" + validateHeaders(fileName) + """;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-18
        • 2016-02-10
        • 2013-04-26
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        相关资源
        最近更新 更多