spring mvc 文件上传漏洞修复,拦截器白名单过滤
1.配置白名单在配置文件中配置白名单列表UploadFile.Extention=doc,docx,eml,htm,html,jpg,mht,msg,png,ppt,pptx,rar,txt,xls,xlsx,zip,pdf,jpeg,gif2.拦截器public class FileShellInterceptor extends HandlerInterceptorAdapter {@Over
·
1.配置白名单
在配置文件中配置白名单列表
UploadFile.Extention=doc,docx,eml,htm,html,jpg,mht,msg,png,ppt,pptx,rar,txt,xls,xlsx,zip,pdf,jpeg,gif
2.拦截器
public class FileShellInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpServletRequest req=(HttpServletRequest)request;
MultipartResolver multipartResolver=new CommonsMultipartResolver();
if(multipartResolver.isMultipart(req)){
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> files= multipartRequest.getFileMap();
Iterator<String> iterator = files.keySet().iterator();
while(iterator.hasNext()){
String formKey = (String) iterator.next();
MultipartFile multipartFile = multipartRequest.getFile(formKey);
if (StringUtils.isNotEmpty(multipartFile.getOriginalFilename())) {
String filename = multipartFile.getOriginalFilename();
if(checkFile(filename)){
return true;
} else {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
response.getWriter().write("<script>alert('上传文件无效!');</script>");
return false;
}
}
}
return true;
}else{
return true;
}
}
private boolean checkFile(String fileName){
boolean flag=false;
// 文件后缀白名单
String suffixList=AppConfigurationProperties.getProperty("UploadFile.Extention");
//获取文件后缀
String suffix=fileName.substring(fileName.lastIndexOf(".")+1, fileName.length());
if(suffixList.contains(suffix.trim().toLowerCase())){
flag=true;
}
return flag;
}
}
3.拦截器配置
<!--文件上传拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/iknow/DocumentMain.do"/>
<mvc:mapping path="/iknow/CategoryDocMain.do"/>
<bean class="com.test.FileShellInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)