mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	阻止任意文件下载漏洞
This commit is contained in:
		@@ -5,6 +5,7 @@ import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.http.MediaType;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PostMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
@@ -41,17 +42,15 @@ public class CommonController
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            if (!FileUtils.isValidFilename(fileName))
 | 
			
		||||
            if (!FileUtils.checkAllowDownload(fileName))
 | 
			
		||||
            {
 | 
			
		||||
                throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
 | 
			
		||||
            }
 | 
			
		||||
            String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
 | 
			
		||||
            String filePath = RuoYiConfig.getDownloadPath() + fileName;
 | 
			
		||||
 | 
			
		||||
            response.setCharacterEncoding("utf-8");
 | 
			
		||||
            response.setContentType("multipart/form-data");
 | 
			
		||||
            response.setHeader("Content-Disposition",
 | 
			
		||||
                    "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, realFileName));
 | 
			
		||||
            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
 | 
			
		||||
            FileUtils.setAttachmentResponseHeader(response, realFileName);
 | 
			
		||||
            FileUtils.writeBytes(filePath, response.getOutputStream());
 | 
			
		||||
            if (delete)
 | 
			
		||||
            {
 | 
			
		||||
@@ -92,18 +91,28 @@ public class CommonController
 | 
			
		||||
     * 本地资源通用下载
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("/common/download/resource")
 | 
			
		||||
    public void resourceDownload(String name, HttpServletRequest request, HttpServletResponse response) throws Exception
 | 
			
		||||
    public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
 | 
			
		||||
            throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        // 本地资源路径
 | 
			
		||||
        String localPath = RuoYiConfig.getProfile();
 | 
			
		||||
        // 数据库资源地址
 | 
			
		||||
        String downloadPath = localPath + StringUtils.substringAfter(name, Constants.RESOURCE_PREFIX);
 | 
			
		||||
        // 下载名称
 | 
			
		||||
        String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
 | 
			
		||||
        response.setCharacterEncoding("utf-8");
 | 
			
		||||
        response.setContentType("multipart/form-data");
 | 
			
		||||
        response.setHeader("Content-Disposition",
 | 
			
		||||
                "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, downloadName));
 | 
			
		||||
        FileUtils.writeBytes(downloadPath, response.getOutputStream());
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            if (!FileUtils.checkAllowDownload(resource))
 | 
			
		||||
            {
 | 
			
		||||
                throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
 | 
			
		||||
            }
 | 
			
		||||
            // 本地资源路径
 | 
			
		||||
            String localPath = RuoYiConfig.getProfile();
 | 
			
		||||
            // 数据库资源地址
 | 
			
		||||
            String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
 | 
			
		||||
            // 下载名称
 | 
			
		||||
            String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
 | 
			
		||||
            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
 | 
			
		||||
            FileUtils.setAttachmentResponseHeader(response, downloadName);
 | 
			
		||||
            FileUtils.writeBytes(downloadPath, response.getOutputStream());
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception e)
 | 
			
		||||
        {
 | 
			
		||||
            log.error("下载文件失败", e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user