当前位置: 首页 > 知识库问答 >
问题:

HTTP响应中HP Fortify的标头操作问题[java]

路思源
2023-03-14

我正在尝试修复HP针对此代码的强化扫描返回的“标题操纵”问题。我不知道上传过程中是否已经验证了文件(我想不是)。我尝试使用正则表达式验证文件名,但没有成功。有人能帮我吗?

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();
            }

共有3个答案

南门建章
2023-03-14

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

//Header manipulation 

公共静态字符串validateHeaders(字符串头)引发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=“附件;filename=”“validateHeaders(filename)”;

庄萧迟
2023-03-14
String contentType = uploadedFiles.getFilecontenttype();
response.setContentType(uploadedFiles.getFilecontenttype());

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

编辑:文件名的idem。清理此字段

裘嘉树
2023-03-14

您应该使用一种方法来过滤中的敏感信息

response.setHeader("Content-Disposition", header)

只是使用

fileName.matches(regex) 

太简单了。

 类似资料:
  • 问题内容: 有什么方法可以获取原始响应的HTTP标头? 该方法对我不起作用,因为服务器吐出了多个“ Set-Cookie”,其中一些丢失了。 问题答案: 该方法对我不起作用 您是在的情况下问这个的吗?不可以,无法使用原始HTTP响应标头。您需要退回到低级的Socket编程。这是一个SSCCE,只需复制“ 粘贴 ”即可运行它。 为了避免每个尝试此代码片段的人都使SO过载,输出如下所示: 要了解有关以

  • 几个星期以来,我一直在努力将Siteminder身份验证与我的nodejs/角4 Web应用程序“集成”。 在服务器端(节点),我有: Angular路由器处理其余的。 这适用于初始权限改造(检索数据的api和服务在不同的机器上,这只是一个前端/客户端应用程序)。 然而,现在用户想要角色,比如编辑/视图,我需要找到一种方法将这些角色从Siteminder标头传递给角前端来处理权限。我玩过拦截器,但

  • 问题内容: 如何从WebView获得HTTP标头响应?我找到了半解决方案,但是它是用Objective- C编写的,不能将其转换为Swift(我已经尝试过使用较差的Obj-C知识了)。 Objective-C代码: 该代码将如何看待Swift? 也许现在我们有更好的方法呢?并不总是启用缓存。 问题答案: 迅速 斯威夫特更严格; 您想保护自己免受指针和: 检查实际是否有 检查实际是否有 对响应进行类

  • 问题内容: 好的,因此我可以使用访问HTTP ajax响应标头 但似乎没有日期,尽管它在那里: 而代码只显示了这一点: 这是ajax调用: 有没有办法可以在响应头中获取日期? 问题答案: 这有帮助:

  • HTTP请求头提供了关于请求,响应或者其他的发送实体的信息。 在本章节中我们将具体来介绍HTTP响应头信息。 应答头 说明 Allow 服务器支持哪些请求方法(如GET、POST等)。 Content-Encoding 文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOut

  • 问题内容: 我正在使用Java()连接到URL 。 我注意到在某些情况下,响应代码为3xx,但“ Location”标头为空。 客户端浏览器在收到这种HTTP响应后如何知道重定向到哪里? 谢谢 问题答案: 并非所有答复都可以自动重定向。 在响应正文中(而非标头中)提供多个URL 。客户/用户必须决定下一步要检索哪个。 ,,和,只有在知道下一个URL时才提供。否则,客户/用户必须决定下一步要做什么。