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



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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux默认安装路径在哪里_linux常用的20个命令

    linux默认安装路径在哪里_linux常用的20个命令Nginx安装安装路径 /usr/local/nginx配置文件 /usr/local/nginx/conf/nginx.conf启动:进入到/usr/local/nginx/sbin下,./nginx关闭:进入到/usr/local/nginx/sbin下 ./nginx -s stop 重启:同上, -s reload停止 kill -9 线程号查看 ps -ef|grep nginxhttps://www.jianshu.com/p/9f2c162ac77c 可参考安装ng

    2022年8月19日
    19
  • ArcGIS for Android 100.3.0(8):绘制点,线,面,圆,添加文本和图片「建议收藏」

    ArcGIS for Android 100.3.0(8):绘制点,线,面,圆,添加文本和图片「建议收藏」空间要素(Geometry)Geometries用以在特定地理位置上通过形状来表达真实世界的对象。图层范围、视图范围、GPS定位都是通过Geometries表达实现进一步的数据编辑、空间分析、地理处理、位置与面积量算都离不开空间要素。案例效果图:布局:&lt;?xmlversion="1.0"encoding="utf-8"?&gt;&lt;RelativeL…

    2022年7月16日
    22
  • 【小程序】手把手带你完成微信小程序开发实践

    【小程序】手把手带你完成微信小程序开发实践帐号相关流程注册范围企业政府媒体其他组织换句话讲就是不让个人开发者注册。:)填写企业信息不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的。填写公司机构信息,对公账户信息绑定管理员微信企业认证公司对公账户对微信进行打款账户自动验证后,自动认证通过,并将认证资金退回公司对公账户,费用在1元内随机小程序发布流程开发实践这次的demo项目为农历和公历的转换器,重在体验

    2022年9月22日
    3
  • QQ空间照片提取_怎么获取QQ的url

    QQ空间照片提取_怎么获取QQ的url对于搞前端开发的人来说,获取qq空间图片的url可谓是轻而易举的事情,我想到的方法有:1.进入qq空间,然后查看网页源代码,然后搜索一下qq号码,然后就知道组装形式了。2.进入qq空间,然后直接F12,然后根据qq空间图像定位到对应的代码处,直接看到组装形式。3.直接对着图片右击,然后复制图片url,哈哈,更简单。

    2022年8月10日
    6
  • GridLayout的使用

    GridLayout的使用GridLayout的使用:GridLayout的类层次结构图:java.lang.Object–java.awt.GridLayoutGridLayout比FlowLayout多了行和列的设置,也就是说你要先设置GridLayout共有几行几列,就如同二维平面一般,然后你加进去的组件会先填第一行的格子,然后再从第二行开始填,依此类扒,就像是一个个的格子一般。而

    2022年6月12日
    37
  • mysql 多行转一列_mysql行转列(多行转一列)

    mysql 多行转一列_mysql行转列(多行转一列)场景比如说一个订单对应多条数据,当状态(status)=1的时候,数量(num)=25,当状态(status)=2的时候,数量(num)=45,现在想用一条sql记录下不同状态对应的数量为多少,如下图所示:期待结果->sql语句示例SELECTtrades_id,MAX(CASEWHENapply_status=1THENpay_changeELSE0END)’nu…

    2022年5月24日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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