大家好,又见面了,我是你们的朋友全栈君。
13年的网站,技术不成熟,坑坑洼洼,现在看当时的代码简直不忍直视。
14年Struts2报出Struts2的漏洞(2.0.0<=version<=2.3.15),
17年3月这次的S-045漏洞,被入侵者植入了后门程序,
1. Struts2的重定向漏洞
根据Apache给出的漏洞修复方案,只是升级了jar包版本2.3.16
升级完成后所有页面访问都出现了404,如下bug:
There is no Action mapped for namespace [/] and action name [XX!XX] associated with context path….
解决办法:当时好像使用了Dynamic Method Invocation 动态方法调用,然后Struts.xml文件都修改了通配符和占位符匹配。
2. Struts2 OGNL的高危漏洞S-045
Struts使用的Jakarta解析文件上传请求包不当,当远程攻击者构造恶意的Content-Type,可能导致远程命令执行。
针对此问题做出如下修改:
(1)根据Apache给出的漏洞修复方案,升级Struts2相关jar到2.3.32
(2)关于上传文件部分做出如下验证
<1>上传文件非空验证;
<2>上传文件格式验证;
<3>上传文件验证MimeType;
<4>文件是否可被修改高宽或裁剪(本次项目上传完文件为图片)
<5>文件保存路径重命名。
验证MimeType如下:
public enum FileType {
JPEG("FFD8FF"), PNG("89504E47"), GIF("47494638"), TIFF("49492A00"), BMP(
"424d"), DWG("41433130"), PSD("38425053"), XML("3C3F786D6C"), HTML(
"68746C3E"), PDF("25044462D312E"), ZIP("504B0304"), RAR("52617221"), WAV(
"57415645"), AVI("41564920");
private String value = "";
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
private FileType(String value) {
this.value = value;
}
}
/**
* 验证图片的合法性
* @param file
* @return
* @throws IOException
*/
public static boolean isInMimeType(String fileUrl) throws IOException{
boolean flag = false;
String mtype = getMimeType(fileUrl);
MimeType[] ts = MimeType.values();
for (MimeType mt : ts) {
if(mt.getValue().equals(mtype)){
flag = true;
break;
}
}
return flag;
}
/**
* 获取图片MIME
* @param fileUrl
* @return
* @throws java.io.IOException
*/
public static String getMimeType(String fileUrl) throws java.io.IOException {
FileNameMap fileNameMap = URLConnection.getFileNameMap();
String type = fileNameMap.getContentTypeFor(fileUrl);
return type;
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161705.html原文链接:https://javaforall.cn