我正在尝试修复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();
}
在这种情况下,您可以使用此方法验证文件名中的头值
//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)”;
String contentType = uploadedFiles.getFilecontenttype();
response.setContentType(uploadedFiles.getFilecontenttype());
首先,您可以在这里修复冗余。其次,问题可能来自您不尝试验证内容类型这一事实。如果内容类型已被更改,并且与文件的实际内容不匹配,该怎么办?每个用户输入都应该经过消毒和/或与您实际期望的内容白名单进行比较。
编辑:文件名的idem
。清理此字段
您应该使用一种方法来过滤中的敏感信息
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时才提供。否则,客户/用户必须决定下一步要做什么。