任意文件类型上传漏洞
攻击者在上传的pdf文件中插入XSS语句,当用户访问上传后的文件时可触发XSS语句。
修复思路
1、禁止上传pdf文件,只允许上传图片类型
2、校验上传到服务器端的文件,确保是图片格式
效果目标
1、上传pdf类型的文件不被允许
2、将非图片类的文件,修改为图片扩展名后,进行上传,也不被允许
实现说明
1、在统一的文件上传处,检测扩展名及context-type
2、通过ImageIo获取图片宽高,获取不到,说明不是图片,不允许上传
示例代码:
/**
* 通过读取文件并获取其width及height的方式,来判断判断当前文件是否图片
* @param imageFile
* @return
*/
public static boolean isImage(File imageFile) {
if (!imageFile.exists()) {
return false;
}
Image img = null;
try {
img = ImageIO.read(imageFile);
if (img == null || img.getWidth(null) <= 0 || img.getHeight(null) <= 0) {
return false;
}
return true;
} catch (Exception e) {
return false;
} finally {
img = null;
}
}