Struts2

漏洞基础

OGNL

object Graphic Navigation Language

  • 表达式语言(其他表达式语言有SpEL、JbossEL.... )
  • 帮助开发人员用简单表达式完成一些“常规”工作,使工作简化
  • 链式结构: step1, step2..., result (三目: num % 2 == 0? 'even' : 'odd')

OgnlContext ———OGNL上下文关系

  • 以map的形式存放大量的JavaBean对象
  • 可以通过.setRoot(object)设置上下文中的根对象
  • 根对象数据在访问的时候就不需要加#

OGNL的#号

  • 访问非根属性
  • 用于过滤和投影: subs.{?#this.i>1}·用来构造map: #{k:v, k:v}

Lambda :[e]

OgnlContext中存在一些常用的变量

  • _root :在OgnlContext内维护着的Root对象,它是OGNL主要的操作对象
  • _values : 以HashMap形式保存传入OgnIContext的上下文环境(如对象、属性值)
  • ClassResolver:指定处理class loading的处理类,默认Resolver调用
  • Class.forNameTypeConverter:转化处理类,指定对象转成字符串以及字符串转对象的处理方式_memberAccess :指定属性访问策略

Struts 2框架( since 2004)

  • 用于开发Java EE网络应用程序的开放源代码网页应用程序架构
  • 具有一个前身叫做Struts 1
  • 开发者喜欢配合spring、hibernat用,称SSH
  • 以OGNL作为默认的表达式语言
  • Struts2是MVC基础的框架

执行流程

  1. 客户端发送一个请求,将封装成HttpServletRequest ;
  2. 请求经过ActionContextCleanUp可选过滤器、其他Web过滤器如SiteMesh,到达FilterDispatcher过滤器;
  3. FilterDispatcher过滤器被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action ;
  4. 如果ActionMapper 决定需要调用某个Action,FilterDispatcher 把请求的处理交给Action 代理ActionProxy ;
  5. ActionProxy通过Configuration Manager读取struts.xml 以及它包含的*.xml 配置文件,找到需要调用的Action类;
  6. 找到需要调用的Action类后,ActionProxy 会创建一个ActionInvocation的实例,依次调用相关Interceptor,调用Action执行获取结果;
  7. ActionInvocation将查找Result传入到Template进行计算渲染,然后经过Interceptors(和步骤6相反)之后返回HttpservletResponse给用户