Struts2框架

科技工作者之家 2020-11-17

Struts2框架是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java Servlet API,鼓励开发者采用MVC架构。Struts2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web应用程序框架。

简介缘起于Apache Struts的WebWork框架,旨在提供相对于Struts框架的增强和改进,同时保留与Struts框架类似的结构。2005年12月,WebWork宣布WebWork 2.2以Apache Struts 2的名义合并至Struts。2007年2月第一个全发布(full release)版本释出。

Struts2引入了几个新的框架特性:从逻辑中分离出横切关注点的拦截器、减少或者消除配置文件、贯穿整个框架的强大表达式语言、支持可变更和可重用的基于MVC模式的标签API, Struts2充分利用了从其它MVC框架学到的经验和教训,使得 Struts2框架更加清晰灵活。

开发目标Struts1设计的第一目标就是使MVC模式应用于web程序设计。在过去10年,Struts在更好的web应用方面所做的工作是值得肯定的。在某些方面,Struts社区注意到这一框架的局限性,所以这个活跃的社区通过对MVC运行模式的重新理解并同时引入一些新的建筑学方面的设计理念后,新的Struts2框架结构更清晰,使用更灵活方便。

这一新的结构包含应用逻辑的横切面拦截器,基于注释的配置以减少和去除XML形式的配置文件,功能强大的表达式语言,支持可更改、可重用UI组件的基于微MVC的标签库。Struts2有两方面的技术优势,一是所有的Struts2应用程序都是基于client/server HTTP交换协议,The Java Servlet API揭示了Java Servlet只是Java API的一个很小子集,这样我们可以在业务逻辑部分使用功能强大的Java语言进行程序设计。

Struts 2提供了对MVC的一个清晰的实现,这一实现包含了很多参与对所以请求进行处理的关键组件,如:拦截器、OGNL表达式语言、堆栈。1

特点简单的基于POJO的操作

简化的可测试性

线程安全

AJAX支持

jQuery插件

Dojo Toolkit插件(不建议使用)

Ajax客户端验证

模板支持

支持不同的结果类型

插件易于扩展

REST插件(基于REST的动作,无扩展名的URL)

常规插件(通过约定和注释进行动作配置)

Spring插件(依赖注入)

Hibernate插件

支持设计

JFreechart插件(图表)

jQuery插件(Ajax支持,UI小部件,动态表,图表)

Rome plugin

plugin

漏洞情况漏洞简介

ApacheStruts 2.3.5 – 2.3.31版本及2.5 – 2.5.10版本存在远程代码执行漏洞(CNNVD-201703-152 ,CVE-2017-5638)。该漏洞是由于上传功能的异常处理函数没有正确处理用户输入的错误信息。导致远程攻击者可通过发送恶意的数据包,利用该漏洞在受影响服务器上执行任意命令。

漏洞危害

攻击者可通过发送恶意构造的HTTP数据包利用该漏洞,在受影响服务器上执行系统命令,进一步可完全控制该服务器,造成拒绝服务、数据泄露、网站造篡改等影响。由于该漏洞利用无需任何前置条件(如开启dmi ,debug等功能)以及启用任何插件,因此漏洞危害较为严重。

处理手法

Struts2开发组常被指漏洞修复手法不妥,要么修复后仍有可利用,要么无法修复并长期闲置。

其中包括一个由标记为S2-003的漏洞报告引发了一连串的远程执行问题,官方多次修复仍没能完全解决,甚至是报告提交者多次提交其绕过方案警醒开发组注意。

2013年7月发布了2.3.15.1发布版,但在修复事项中公开了一段远程执行漏洞的示例代码,被黑客圈内利用,导致了中国大陆大量使用Struts2的网站被入侵。2

本词条内容贡献者为:

王慧维 - 副研究员 - 西南大学

科技工作者之家

科技工作者之家APP是专注科技人才,知识分享与人才交流的服务平台。