我相信,你在开发Web应用时,后端一定会提供文件的上传功能,比如前端页面肯定有图片的展示,后端必定会提供图片的上传入口。但是,你在做文件上传功能时,是否考虑过它的安全性问题呢?
请看下面的代码:
@PostMapping("upload")
public String upload(@RequestParam("file")MultipartFile file,HttpServletRequest request)throws Exception{
String filename = file.getOriginalFilename();
//上传文件到服务器
String url = uploadService.upload(filename);
return url;
}
上述代码存在非常严重的安全漏洞,可以看到,该代码没有对文件做任何的限制,只要传入的是文件流,它就能接收它,并且将其上传到服务器。
假设你的服务器运行的是 Tomcat 容器,那么它能执行后缀为 .jsp 的文件,攻击者就可以上传 .jsp 文件,并且文件内容为可执行的 java 代码。当 .jsp 文件被上传上去后,攻击就可以利用菜刀、蚁剑等工具连接该 .jsp 文件,连接成功后,攻击者就可以控制你的服务器,俗称getshell。如图所示: