移除了com.opensymphony.xwork.util.TextParseUtil#translateVariables
的调用,跟进这个函数发现这里是ognl表达式执行点。
然后走到com.atlassian.confluence.servlet.ConfluenceServletDispatcher#serviceAction
ConfluenceServletDispatcher是ServletDispatcher的子类
在serviceAction中先调用createActionProxy创建一个代理对象,然后调用代理对象的execute函数,在代理对象中我们的payload保存至namespace字段
然后将自身this传递给interceptor.intercept(this)
,以com.opensymphony.xwork.interceptor.AroundInterceptor
拦截器为例,仍会调用invocation.invoke()
其中notpermitted对应的result类为com.opensymphony.xwork.ActionChainResult
,所以会进入com.opensymphony.xwork.ActionChainResult#execute
v7.15开始,Confluence在OGNL表达式解析时加入了沙箱设置。在com.opensymphony.xwork.util.TextParseUtil#translateVariables
调用ognl时使用findValue
|
|