1.2 文件操作

1.2.1【必须】文件类型限制

须在服务器端采用白名单方式对上传或下载的文件类型、大小进行严格的限制。仅允许业务所需文件类型上传,避免上传.jsp、.jspx、.class、.java等可执行文件。参考示例:

  1. String file_name = file.getOriginalFilename();
  2. String[] parts = file_name.split("\\.");
  3. String suffix = parts[parts.length - 1];
  4. switch (suffix){
  5. case "jpeg":
  6. suffix = ".jpeg";
  7. break;
  8. case "jpg":
  9. suffix = ".jpg";
  10. break;
  11. case "bmp":
  12. suffix = ".bmp";
  13. break;
  14. case "png":
  15. suffix = ".png";
  16. break;
  17. default:
  18. //handle error
  19. return "error";
  20. }
1.2.2【必须】禁止外部文件存储于可执行目录

禁止外部文件存储于WEB容器的可执行目录(appBase)。建议保存在专门的文件服务器中。

1.2.3【建议】避免路径拼接

文件目录避免外部参数拼接。保存文件目录建议后台写死并对文件名进行校验(字符类型、长度)。建议文件保存时,将文件名替换为随机字符串。

1.2.4【必须】避免路径穿越

如因业务需要不能满足1.2.3的要求,文件路径、文件命中拼接了不可行数据,需判断请求文件名和文件路径参数中是否存在../或..\(仅windows), 如存在应判定路径非法并拒绝请求。