一.简介

Apache Struts 2最初被称为WebWork 2,它是一个简洁的、可扩展的框架,可用于创建企业级Java web应用程序。设计这个框架是为了从构建、部署、到应用程序维护方面来简化整个开发周期。

二。曾经的安全问题

在2013年6月底发布的Struts 2.3.15版本被曝出存在重要的安全漏洞 ,主要问题如下:

1.可远程执行服务器脚本代码

用户可以构造http://host/struts2-blank/example/X.action?action:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}链接,command goes here可以换成是破坏脚本的路径和参数,比如fdisk -f等,造成破环系统无法运行的目的。

2.重定向漏洞

用户可以构造如知名网站淘宝的重定向连接,形如<a href="http://www.淘宝.com/item00001.html?redirect:http://黑客/getyourPassword">打折新款</a>,引导用户点击后进入钓鱼网站,在界面上让其进行登陆用以获取用户的密码。

造成的影响

苹果、中国移动、中国联通、百度、腾讯、淘宝、京东、Sohu、民生银行等大型企业的网站均遭毒手,运维 工程师苦不堪言。

应对措施

Apache团队紧急发布了Struts 2.3.15.1安全更新版本,可升级到此版本来解决上述问题。

三.Struts2 架构

从一个高水平角度看,Struts2 是一个MVC拉动的(或MVC2)框架,Struts2 的模型-视图-控制器模式是通过以下五个核心部分进行实现的:

  • 操作(Actions)
  • 拦截器(Interceptors)
  • 值栈(Value Stack)/OGNL
  • 结果(Result)/结果类型
  • 视图技术
而Struts2 与传统的MVC框架略有不同,因为它由Action扮演模型的角色,而不是控制器,虽然这样会有一些重叠。

上图描述了Struts2 高级系统架构下的模型、视图及控制器。控制器是通过Struts2 分派servlet过滤器以及拦截器进行实现,模型是通过Actions进行实现,而视图则是结果类型和结果的结合。值栈和OGNL提供共同的路线、链接以及与其他组件之间的集成。
除了上述部分,还有许多组件相关的信息。web应用程序组件、Actions组件、拦截器组件、结果组件等等。
这些是Struts2 MVC模式的体系结构概述,在随后的章节中,我们将详细了解各个部分。

请求生命周期

通过上述图片的描述,我们可以依照下面几点解释在Struts2 中用户的请求生命周期:
  • 用户发送一个资源需求的请求到服务器(例如:页面)。
  • 核心控制器查看请求后确定适当的动作。
  • 使用验证、文件上传等配置拦截器功能。
  • 执行选择的动作来完成请求的操作。
  • 另外,如果需要的话,配置的拦截器可做任何后期处理。
  • 最后,由视图显示结果并返回给用户。

最新文章

  1. HTTP相关函数
  2. RET2LIBC 练习(3) -- VIRTUALALLOC
  3. Entity Framework Fluent API
  4. linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR)
  5. SSIS 控制流和数据流(转)
  6. HDU1014Uniform Generator
  7. Oracle EBS 如何月结、对账[Z]
  8. Java学习之路:ArrayList用法
  9. oracle 的 SDO_GEOMETRY
  10. tongweb安装后无法启动问题
  11. java中的闭包
  12. 转:Spring与Mybatis整合的MapperScannerConfigurer处理过程源码分析
  13. 849. Maximize Distance to Closest Person
  14. Android 状态栏开发
  15. Linux vsftpd 配置文件详解
  16. Eclipse 语言包下载
  17. DPSR随手笔记
  18. spring boot继承web和mybatis时,调用接口删除记录出现的空指针以及解决办法
  19. nginx怎么与tomcat完美结合
  20. Java代码实现单例模式

热门文章

  1. Android 中更新 UI 的四种方式
  2. Jmeter联机负载时报错: connection refused to host localhost,nested exception is:java.net ConnectException:Connection refused:connect
  3. C# 后台服务 web.config 中 项“ConnectionString”已添加。问题
  4. Qt编写数据可视化大屏界面电子看板1-布局方案
  5. JSTL优点
  6. dozer转化对象
  7. ETH挖矿
  8. Docker容器组件
  9. 【VS开发】关于线程安全一些细节体会
  10. NDK学习笔记-JNI开发流程