网络安全Java代码审计实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2.1 常见文件上传方式

在Java开发中,文件上传的方式有多种,我们主要讲解以下三种:通过文件流的方式上传、通过ServletFileUpload方式上传和通过MultipartFile方式上传。

1.通过文件流的方式上传

2.通过ServletFileUpload方式上传

3.通过MultipartFile方式上传

类似的文件上传方式很多,这里不一一列举。文件上传漏洞的本质还是未对文件名做严格校验,常见的主要有如下几种情况:未对文件做任何过滤,仅在前端通过js检验,只判断了Content-Type,后缀过滤不全,读取后缀方式错误等。

细心的读者可能已经发现:示例代码中存在一个经典的上传绕过问题,程序通过“suffixName=fileName.substring(fileName.indexOf("."));”获取后缀,随后判断其是否在黑名单中。这个逻辑看似十分安全却是一个很容易犯的错误,当文件名为abc.jpg.jsp时SuffixName将等于.jpg.jsp,这明显是不会和黑名单中的后缀相等的。因文件上传的各类特性,在审计文件上传漏洞时,关注的重点往往是在上传表单的代码段。我们可以总结出以下一些经典的关键字。