
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.2.3 文件上传漏洞修复
对于文件上传漏洞的修复一般最有效的方法是限制上传类型并对文件进行重命名,这里笔者进行了一些简单的总结:采取白名单策略限制运行上传的类型;对文件名字进行重命名;去除文件名中的特殊字符;上传图片时,通过图片库检测上传文件是否为图片。
下面介绍一种较为安全的写法:


以上代码通过多种方式来防止文件上传漏洞的产生,其中一种是设置了白名单,只有符合添加条件的文件才可以上传:

通过“String Suffix=fileName.substring(fileName.lastIndexOf("."))”中的“fileName.lastIndexOf(".")”获取文件的真实后缀,避免了上文中通过“fileName.substring(fileName.indexOf("."))”获取文件后缀,以.jpg.jsp的方式绕过检测的情况。通过“String whitetype[]={"image/gif","image/jpeg","image/jpg","image/png"}”对文件的类型进行判断,虽然可以通过抓包的方式修改Content-Type来绕过,但也有一定限制作用。通过验证后,在文件存储时又将文件进行了随机重命名,避免上传的文件被恶意利用,上传效果如图2-46所示。

图2-46 上传效果