跳到主要内容

任意文件类型上传漏洞

攻击者在上传的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;
}
}