恢复文件上传方式并修正带后缀

This commit is contained in:
wangwei
2019-06-12 11:54:08 +08:00
parent 193bb8c1c3
commit c8467db46b
4 changed files with 87 additions and 99 deletions

View File

@@ -6,16 +6,12 @@ import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@@ -73,19 +69,19 @@ public class FileHijackController extends CommonController{
File file = null; File file = null;
try{ try{
if(cfgFile != null) { if(cfgFile != null) {
String sep = System.getProperty("file.separator"); String filename = cfgFile.getOriginalFilename();
String digestFilePath = request.getRealPath("/") + "digestFile"; String prefix = FileUtils.getPrefix(filename, false);
FileUtils.createDirectory(digestFilePath); String suffix = FileUtils.getSuffix(filename, false);
String fileName = UUID.randomUUID() + FileUtils.getSuffix(cfgFile.getOriginalFilename(), true); file = File.createTempFile("file_" + prefix, FileUtils.getSuffix(filename, true));
file = new File(digestFilePath + sep + fileName); cfgFile.transferTo(file);// 复制文件
FileCopyUtils.copy(cfgFile.getBytes(), file); String md5 = FileUtils.getFileMD5(file);
Map<String, Object> srcMap = Maps.newHashMap(); Map<String, Object> srcMap = Maps.newHashMap();
srcMap.put("filetype", FileUtils.getSuffix(cfgFile.getOriginalFilename(), false)); srcMap.put("filetype", suffix);
srcMap.put("datatype", "dbSystem");// 源文件存入数据中心 srcMap.put("datatype", "dbSystem");// 源文件存入数据中心
srcMap.put("createTime", new Date()); srcMap.put("createTime", new Date());
srcMap.put("key", FileUtils.getPrefix(cfgFile.getOriginalFilename(), false)); srcMap.put("key", prefix);
srcMap.put("fileName", cfgFile.getOriginalFilename()); srcMap.put("fileName", filename);
srcMap.put("checksum", DigestUtils.md5Hex(cfgFile.getBytes())); srcMap.put("checksum", md5);
ToMaatResult result = ConfigServiceUtil.postFileCfg(null, file, JsonMapper.toJsonString(srcMap)); ToMaatResult result = ConfigServiceUtil.postFileCfg(null, file, JsonMapper.toJsonString(srcMap));
logger.info("proxy 劫持文件 上传响应信息:" + JsonMapper.toJsonString(result)); logger.info("proxy 劫持文件 上传响应信息:" + JsonMapper.toJsonString(result));
String path = null; String path = null;

View File

@@ -6,16 +6,12 @@ import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@@ -72,19 +68,19 @@ public class FileInsertScriptController extends CommonController{
File file = null; File file = null;
try{ try{
if(cfgFile != null) { if(cfgFile != null) {
String sep = System.getProperty("file.separator"); String filename = cfgFile.getOriginalFilename();
String digestFilePath = request.getRealPath("/") + "digestFile"; String prefix = FileUtils.getPrefix(filename, false);
FileUtils.createDirectory(digestFilePath); String suffix = FileUtils.getSuffix(filename, false);
String fileName = UUID.randomUUID() + FileUtils.getSuffix(cfgFile.getOriginalFilename(), true); file = File.createTempFile("file_"+ prefix, FileUtils.getSuffix(filename, true));
file = new File(digestFilePath + sep + fileName); cfgFile.transferTo(file);//复制文件
FileCopyUtils.copy(cfgFile.getBytes(), file); String md5 = FileUtils.getFileMD5(file);
Map<String, Object> srcMap = Maps.newHashMap(); Map<String,Object> srcMap = Maps.newHashMap();
srcMap.put("filetype", FileUtils.getSuffix(cfgFile.getOriginalFilename(), false)); srcMap.put("filetype", suffix);
srcMap.put("datatype", "dbSystem");// 源文件存入数据中心 srcMap.put("datatype", "dbSystem");//源文件存入数据中心
srcMap.put("createTime", new Date()); srcMap.put("createTime",new Date());
srcMap.put("key", FileUtils.getPrefix(cfgFile.getOriginalFilename(), false)); srcMap.put("key",prefix);
srcMap.put("fileName", cfgFile.getOriginalFilename()); srcMap.put("fileName", filename);
srcMap.put("checksum", DigestUtils.md5Hex(cfgFile.getBytes())); srcMap.put("checksum", md5);
ToMaatResult result = ConfigServiceUtil.postFileCfg(null, file, JsonMapper.toJsonString(srcMap)); ToMaatResult result = ConfigServiceUtil.postFileCfg(null, file, JsonMapper.toJsonString(srcMap));
logger.info("注入脚本文件上传响应信息:"+JsonMapper.toJsonString(result)); logger.info("注入脚本文件上传响应信息:"+JsonMapper.toJsonString(result));
String srcAccessUrl = null; String srcAccessUrl = null;

View File

@@ -11,17 +11,14 @@ package com.nis.web.controller.configuration.proxy;
import java.io.File; import java.io.File;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@@ -97,19 +94,19 @@ public class FileResponsePageController extends CommonController {
File file = null; File file = null;
try{ try{
if(cfgFile != null) { if(cfgFile != null) {
String sep = System.getProperty("file.separator"); String filename = cfgFile.getOriginalFilename();
String digestFilePath = request.getRealPath("/") + "digestFile"; String prefix = FileUtils.getPrefix(filename, false);
FileUtils.createDirectory(digestFilePath); String suffix = FileUtils.getSuffix(filename, false);
String fileName = UUID.randomUUID() + FileUtils.getSuffix(cfgFile.getOriginalFilename(), true); file = File.createTempFile("file_"+ prefix, FileUtils.getSuffix(filename, true));
file = new File(digestFilePath + sep + fileName); cfgFile.transferTo(file);//复制文件
FileCopyUtils.copy(cfgFile.getBytes(), file); String md5 = FileUtils.getFileMD5(file);
Map<String, Object> srcMap = Maps.newHashMap(); Map<String,Object> srcMap = Maps.newHashMap();
srcMap.put("filetype", FileUtils.getSuffix(cfgFile.getOriginalFilename(), false)); srcMap.put("filetype", suffix);
srcMap.put("datatype", "dbSystem");// 源文件存入数据中心 srcMap.put("datatype", "dbSystem");//源文件存入数据中心
srcMap.put("createTime", new Date()); srcMap.put("createTime",new Date());
srcMap.put("key", FileUtils.getPrefix(cfgFile.getOriginalFilename(), false)); srcMap.put("key",prefix);
srcMap.put("fileName", cfgFile.getOriginalFilename()); srcMap.put("fileName", filename);
srcMap.put("checksum", DigestUtils.md5Hex(cfgFile.getBytes())); srcMap.put("checksum", md5);
ToMaatResult result = ConfigServiceUtil.postFileCfg(null, file, JsonMapper.toJsonString(srcMap)); ToMaatResult result = ConfigServiceUtil.postFileCfg(null, file, JsonMapper.toJsonString(srcMap));
logger.info("http 重定向阻断文件上传响应信息:"+JsonMapper.toJsonString(result)); logger.info("http 重定向阻断文件上传响应信息:"+JsonMapper.toJsonString(result));
String srcAccessUrl = null; String srcAccessUrl = null;
@@ -118,7 +115,7 @@ public class FileResponsePageController extends CommonController {
srcAccessUrl=data.getAccessUrl(); srcAccessUrl=data.getAccessUrl();
cfg.setUrl(srcAccessUrl);; cfg.setUrl(srcAccessUrl);;
} }
cfg.setMd5(DigestUtils.md5Hex(cfgFile.getBytes()));//文件md5值 cfg.setMd5(md5);//文件md5值
cfg.setContentLength(file.length());//文件长度 cfg.setContentLength(file.length());//文件长度
} }
proxyFileResponsePageService.saveOrUpdate(cfg); proxyFileResponsePageService.saveOrUpdate(cfg);

View File

@@ -27,7 +27,6 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.mock.web.MockMultipartFile; import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
@@ -210,19 +209,19 @@ public class PxyObjKeyringController extends BaseController {
try { try {
if (validFlag) { if (validFlag) {
if (publicKeyFileI != null) { if (publicKeyFileI != null) {
String sep = System.getProperty("file.separator"); String filename = publicKeyFileI.getOriginalFilename();
String digestFilePath = request.getRealPath("/") + "digestFile"; String prefix = FileUtils.getPrefix(filename, false);
FileUtils.createDirectory(digestFilePath); String suffix = FileUtils.getSuffix(filename, false);
String fileName = UUID.randomUUID() + FileUtils.getSuffix(publicKeyFileI.getOriginalFilename(), true); file = File.createTempFile("file_" + prefix, FileUtils.getSuffix(filename, true));
file = new File(digestFilePath + sep + fileName); publicKeyFileI.transferTo(file);// 复制文件
FileCopyUtils.copy(publicKeyFileI.getBytes(), file); String md5 = FileUtils.getFileMD5(file);
Map<String, Object> srcMap = Maps.newHashMap(); Map<String, Object> srcMap = Maps.newHashMap();
srcMap.put("filetype", FileUtils.getSuffix(publicKeyFileI.getOriginalFilename(), false)); srcMap.put("filetype", suffix);
srcMap.put("datatype", "dbSystem");// 源文件存入数据中心 srcMap.put("datatype", "dbSystem");// 源文件存入数据中心
srcMap.put("createTime", new Date()); srcMap.put("createTime", new Date());
srcMap.put("key", FileUtils.getPrefix(publicKeyFileI.getOriginalFilename(), false)); srcMap.put("key", prefix);
srcMap.put("fileName", publicKeyFileI.getOriginalFilename()); srcMap.put("fileName", filename);
srcMap.put("checksum", DigestUtils.md5Hex(publicKeyFileI.getBytes())); srcMap.put("checksum", md5);
ToMaatResult result = ConfigServiceUtil.postFileCfg(null, file, JsonMapper.toJsonString(srcMap)); ToMaatResult result = ConfigServiceUtil.postFileCfg(null, file, JsonMapper.toJsonString(srcMap));
logger.info("proxy 证书文件策略公钥 文件上传响应信息:" + JsonMapper.toJsonString(result)); logger.info("proxy 证书文件策略公钥 文件上传响应信息:" + JsonMapper.toJsonString(result));
String publicKeyFileAccessUrl = null; String publicKeyFileAccessUrl = null;
@@ -234,19 +233,19 @@ public class PxyObjKeyringController extends BaseController {
} }
} }
if (privateKeyFileI != null) { if (privateKeyFileI != null) {
String sep = System.getProperty("file.separator"); String filename = privateKeyFileI.getOriginalFilename();
String digestFilePath = request.getRealPath("/") + "digestFile"; String prefix = FileUtils.getPrefix(filename, false);
FileUtils.createDirectory(digestFilePath); String suffix = FileUtils.getSuffix(filename, false);
String fileName = UUID.randomUUID() + FileUtils.getSuffix(privateKeyFileI.getOriginalFilename(), true); file = File.createTempFile("file_" + prefix, FileUtils.getSuffix(filename, true));
file = new File(digestFilePath + sep + fileName); privateKeyFileI.transferTo(file);// 复制文件
FileCopyUtils.copy(privateKeyFileI.getBytes(), file); String md5 = FileUtils.getFileMD5(file);
Map<String, Object> srcMap = Maps.newHashMap(); Map<String, Object> srcMap = Maps.newHashMap();
srcMap.put("filetype", FileUtils.getSuffix(privateKeyFileI.getOriginalFilename(), false)); srcMap.put("filetype", suffix);
srcMap.put("datatype", "dbSystem");// 源文件存入数据中心 srcMap.put("datatype", "dbSystem");// 源文件存入数据中心
srcMap.put("createTime", new Date()); srcMap.put("createTime", new Date());
srcMap.put("key", FileUtils.getPrefix(privateKeyFileI.getOriginalFilename(), false)); srcMap.put("key", prefix);
srcMap.put("fileName", privateKeyFileI.getOriginalFilename()); srcMap.put("fileName", filename);
srcMap.put("checksum", DigestUtils.md5Hex(privateKeyFileI.getBytes())); srcMap.put("checksum", md5);
ToMaatResult result = ConfigServiceUtil.postFileCfg(null, file, JsonMapper.toJsonString(srcMap)); ToMaatResult result = ConfigServiceUtil.postFileCfg(null, file, JsonMapper.toJsonString(srcMap));
logger.info("proxy 证书文件策略私钥 上传响应信息:" + JsonMapper.toJsonString(result)); logger.info("proxy 证书文件策略私钥 上传响应信息:" + JsonMapper.toJsonString(result));
String privateKeyFileAccessUrl = null; String privateKeyFileAccessUrl = null;
@@ -695,19 +694,19 @@ public class PxyObjKeyringController extends BaseController {
try { try {
if (validFlag) { if (validFlag) {
if (certFileI != null) { if (certFileI != null) {
String sep = System.getProperty("file.separator"); String filename = certFileI.getOriginalFilename();
String digestFilePath = request.getRealPath("/") + "digestFile"; String prefix = FileUtils.getPrefix(filename, false);
FileUtils.createDirectory(digestFilePath); String suffix = FileUtils.getSuffix(filename, false);
String fileName = UUID.randomUUID() + FileUtils.getSuffix(certFileI.getOriginalFilename(), true); file = File.createTempFile("file_" + prefix, FileUtils.getSuffix(filename, true));
file = new File(digestFilePath + sep + fileName); certFileI.transferTo(file);// 复制文件
FileCopyUtils.copy(certFileI.getBytes(), file); String md5 = FileUtils.getFileMD5(file);
Map<String, Object> srcMap = Maps.newHashMap(); Map<String, Object> srcMap = Maps.newHashMap();
srcMap.put("filetype", FileUtils.getSuffix(certFileI.getOriginalFilename(), false)); srcMap.put("filetype", suffix);
srcMap.put("datatype", "dbSystem");// 源文件存入数据中心 srcMap.put("datatype", "dbSystem");// 源文件存入数据中心
srcMap.put("createTime", new Date()); srcMap.put("createTime", new Date());
srcMap.put("key", FileUtils.getPrefix(certFileI.getOriginalFilename(), false)); srcMap.put("key", prefix);
srcMap.put("fileName", certFileI.getOriginalFilename()); srcMap.put("fileName", filename);
srcMap.put("checksum", DigestUtils.md5Hex(certFileI.getBytes())); srcMap.put("checksum", md5);
ToMaatResult result = ConfigServiceUtil.postFileCfg(null, file, JsonMapper.toJsonString(srcMap)); ToMaatResult result = ConfigServiceUtil.postFileCfg(null, file, JsonMapper.toJsonString(srcMap));
logger.info("proxy 可信证书 文件上传响应信息:" + JsonMapper.toJsonString(result)); logger.info("proxy 可信证书 文件上传响应信息:" + JsonMapper.toJsonString(result));
String certFileAccessUrl = null; String certFileAccessUrl = null;
@@ -816,19 +815,19 @@ public class PxyObjKeyringController extends BaseController {
try { try {
if (validFlag) { if (validFlag) {
if (crlFileI != null) { if (crlFileI != null) {
String sep = System.getProperty("file.separator"); String filename = crlFileI.getOriginalFilename();
String digestFilePath = request.getRealPath("/") + "digestFile"; String prefix = FileUtils.getPrefix(filename, false);
FileUtils.createDirectory(digestFilePath); String suffix = FileUtils.getSuffix(filename, false);
String fileName = UUID.randomUUID() + FileUtils.getSuffix(crlFileI.getOriginalFilename(), true); file = File.createTempFile("file_" + prefix, FileUtils.getSuffix(filename, true));
file = new File(digestFilePath + sep + fileName); crlFileI.transferTo(file);// 复制文件
FileCopyUtils.copy(crlFileI.getBytes(), file); String md5 = FileUtils.getFileMD5(file);
Map<String, Object> srcMap = Maps.newHashMap(); Map<String, Object> srcMap = Maps.newHashMap();
srcMap.put("filetype", FileUtils.getSuffix(crlFileI.getOriginalFilename(), false)); srcMap.put("filetype", suffix);
srcMap.put("datatype", "dbSystem");// 源文件存入数据中心 srcMap.put("datatype", "dbSystem");// 源文件存入数据中心
srcMap.put("createTime", new Date()); srcMap.put("createTime", new Date());
srcMap.put("key", FileUtils.getPrefix(crlFileI.getOriginalFilename(), false)); srcMap.put("key", prefix);
srcMap.put("fileName", crlFileI.getOriginalFilename()); srcMap.put("fileName", filename);
srcMap.put("checksum", DigestUtils.md5Hex(crlFileI.getBytes())); srcMap.put("checksum", md5);
ToMaatResult result = ConfigServiceUtil.postFileCfg(null, file, JsonMapper.toJsonString(srcMap)); ToMaatResult result = ConfigServiceUtil.postFileCfg(null, file, JsonMapper.toJsonString(srcMap));
logger.info("可信证书crl 文件上传响应信息:" + JsonMapper.toJsonString(result)); logger.info("可信证书crl 文件上传响应信息:" + JsonMapper.toJsonString(result));
String crlFileAccessUrl = null; String crlFileAccessUrl = null;
@@ -979,19 +978,19 @@ public class PxyObjKeyringController extends BaseController {
PxyObjTrustedCaCert cacertBuitIn=new PxyObjTrustedCaCert(); PxyObjTrustedCaCert cacertBuitIn=new PxyObjTrustedCaCert();
cfg.setBuiltIn(1); cfg.setBuiltIn(1);
BeanUtils.copyProperties(cfg, cacertBuitIn); BeanUtils.copyProperties(cfg, cacertBuitIn);
String sep = System.getProperty("file.separator"); filename = file.getName();
String digestFilePath = request.getRealPath("/") + "digestFile"; String prefix = FileUtils.getPrefix(filename, false);
FileUtils.createDirectory(digestFilePath); String suffix = FileUtils.getSuffix(filename, false);
String fileName = UUID.randomUUID() + FileUtils.getSuffix(multipartFile.getOriginalFilename(), true); newFile = File.createTempFile("file_" + prefix, FileUtils.getSuffix(filename, true));
file = new File(digestFilePath + sep + fileName); multipartFile.transferTo(newFile);// 复制文件
FileCopyUtils.copy(multipartFile.getBytes(), file); String md5 = FileUtils.getFileMD5(file);
Map<String, Object> srcMap = Maps.newHashMap(); Map<String, Object> srcMap = Maps.newHashMap();
srcMap.put("filetype", FileUtils.getSuffix(multipartFile.getOriginalFilename(), false)); srcMap.put("filetype", suffix);
srcMap.put("datatype", "dbSystem");// 源文件存入数据中心 srcMap.put("datatype", "dbSystem");// 源文件存入数据中心
srcMap.put("createTime", new Date()); srcMap.put("createTime", new Date());
srcMap.put("key", FileUtils.getPrefix(multipartFile.getOriginalFilename(), false)); srcMap.put("key", prefix);
srcMap.put("fileName", multipartFile.getOriginalFilename()); srcMap.put("fileName", filename);
srcMap.put("checksum", DigestUtils.md5Hex(multipartFile.getBytes())); srcMap.put("checksum", md5);
ToMaatResult result = ConfigServiceUtil.postFileCfg(null, file, JsonMapper.toJsonString(srcMap)); ToMaatResult result = ConfigServiceUtil.postFileCfg(null, file, JsonMapper.toJsonString(srcMap));
logger.info("可信证书内置证书 文件上传响应信息:" + JsonMapper.toJsonString(result)); logger.info("可信证书内置证书 文件上传响应信息:" + JsonMapper.toJsonString(result));
String crlFileAccessUrl = null; String crlFileAccessUrl = null;