根据上诉方案,java代码实现
时间: 2024-01-06 08:04:05 浏览: 151
这里给出一个简单的 Java 上传文件漏洞修复代码示例,仅供参考:
```java
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet("/upload")
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// 允许上传的文件类型
private static final List<String> allowedTypes = Arrays.asList("image/jpeg", "image/png", "image/gif");
// 允许上传的文件后缀名
private static final List<String> allowedExtensions = Arrays.asList(".jpg", ".jpeg", ".png", ".gif");
// 允许上传的文件最大大小,单位为字节
private static final long maxFileSize = 10 * 1024 * 1024;
// 上传文件的存储路径
private static final String uploadPath = "/upload/";
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
// 获取上传的文件
Part filePart = request.getPart("file");
String fileName = filePart.getSubmittedFileName();
String fileType = filePart.getContentType();
long fileSize = filePart.getSize();
// 检查文件类型是否合法
if (!allowedTypes.contains(fileType)) {
response.getWriter().println("上传失败:不支持的文件类型!");
return;
}
// 检查文件后缀名是否合法
String extension = fileName.substring(fileName.lastIndexOf('.'));
if (!allowedExtensions.contains(extension.toLowerCase())) {
response.getWriter().println("上传失败:不支持的文件后缀名!");
return;
}
// 检查文件大小是否合法
if (fileSize > maxFileSize) {
response.getWriter().println("上传失败:文件大小超过限制!");
return;
}
// 生成唯一的文件名
String newFileName = UUID.randomUUID().toString() + extension;
// 上传文件到指定目录
String uploadDirPath = request.getServletContext().getRealPath(uploadPath);
File uploadDir = new File(uploadDirPath);
if (!uploadDir.exists()) {
uploadDir.mkdir();
}
File uploadedFile = new File(uploadDir, newFileName);
filePart.write(uploadedFile.getAbsolutePath());
// 返回上传成功信息
response.getWriter().println("上传成功!");
}
}
```
以上代码实现了文件类型白名单过滤、文件名过滤、文件大小限制和上传文件存储路径限制等功能,可以有效防止常见的 Java 上传文件漏洞。
阅读全文