Struts2漏洞总结

Struts2漏洞总结Struts2漏洞总结

大家好,又见面了,我是你们的朋友全栈君。

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;  
	}



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161705.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java:JVM垃圾回收机制[通俗易懂]

    Java:JVM垃圾回收机制[通俗易懂]JVM垃圾回收机制提到Java垃圾回收机制就不得不提到一个方法:system.gc()用于调用垃圾收集器,在调用时垃圾收集器将运行以回收未使用的内存空间,它将尝试释放被丢弃对象所占用的空间。作为程序员有必要了解gc方法,这也是在面试中经常会被问及的问题:我们从三个方面来理解gc:1.JVM如何确定哪些空间能被回收?2.JVM会在什么时候进行垃圾清除的动作?3.JVM如何清除垃圾的?1.JVM如…

  • 毕业两年

    又到毕业季,去年毕业一年,今年,毕业两年了,一年一度的“毕业N年”系列。今年经历了两件事,离职和成长。离职 去年8月份从百度离职了,北京来到杭州,加入现在这家创业公司,做乐器教育方向的,应用叫Finger。成长 技术。这个三两句话也说不清楚,最近一年忙于工作也没写博客了。从客观角度来看的话,更多关注工程的架构和可扩展性,也厌烦了重复性的工作,把重复性的逻辑都通过封装解耦出去,通过“

  • BigDecimal 类型比较大小

    BigDecimal 类型比较大小1.标准做法Longzero=0l;BigDecimalbig_decimal_num=newBigDecimal(zero);intr=big_decimal_num.compareTo(BigDecimal.ZERO);//和0,Zero比较if(r==0)//等于…

  • gdi+ 高速绘制透明窗体

    gdi+ 高速绘制透明窗体

  • 基于实践的LabVIEW零基础入门视频教程

    原文地址::http://blog.eeecontrol.com/LabVIEW1/《基于实践的LabVIEW零基础入门视频教程》资料不在多,而在于精,资料太多,反而会迷失方向,学习最怕的就是打乱仗,选择对的方向,比努力更重要,这也是本人的亲身经历!《基于实践的LabVIEW零基础入门视频教程》方向明确,适合零基础和初学者,针对性强,本课程将用项目与实践的方法带领大家零

  • Linux下nginx的安装以及环境配置「建议收藏」

    Linux下nginx的安装以及环境配置「建议收藏」linux下nginx的安装以及环境配置刚好最近在处理服务器相关的工作,所以记录一下nginx的安装,ok,接下来直接开始操作!第一步:下载nginx压缩包在这里可以去nginx官网下载-&gt;点我下载nginx也可以直接使用wget命令下载,指令如下所示(请根据自己的需求进行下载):wget-chttps://nginx.org/download/nginx-1.10.1.tar…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号