标签: dmi

Struts 2.3表单带有多个提交标签和action属性

这非常简单,与Struts 2.1.x完美配合.但我们最近升级到2.3.15.2并且它破了.基本上我们有一个表单(实际上,很多表单)有多个提交:

<s:form>
 <s:submit action="save"  />
 <s:submit action="resetPassword"  />
</s:form>
Run Code Online (Sandbox Code Playgroud)

如果我坚持标签中的动作一切都很好.但如果它在标签中,我会收到404错误.这是同样的行动!

我一直在调试并发现当你在标签中使用"action"属性时,生成的html是:

<input type="submit" name="action:save">
<input type="submit" name="action:resetPassword">
Run Code Online (Sandbox Code Playgroud)

据说Struts应该采用这个"动作"前缀并说"A-ha!这是一个动作!" 并执行它.它或多或少都是这样.或至少尝试.我发现的是,在非常低的级别,DefaultActionMapper.handleSpecialParameters()方法遍历所有参数并尝试为每个参数创建一个ParameterAction,如果它不为null,则执行它.大多数参数产生"null"ParameterAction,但不产生"action:".

在文档中我发现了这个关于ParameterAction的内容:

Defines a parameter action prefix.  This is executed when the configured prefix key is
matched in a parameter name, allowing the implementation to manipulate the action mapping 
accordingly.  For example, if the "action:foo" parameter name was found, and a 
ParameterAction implementation was registered to handle the "action" prefix, the execute 
method would be called, allowing the implementation to set …
Run Code Online (Sandbox Code Playgroud)

forms jsp struts2 dmi

7
推荐指数
2
解决办法
5942
查看次数

Struts 2 S2-016 Vulenerability Mitigation升级

最近struts修补了一个允许攻击者执行远程代码的漏洞.显然没有修补这就像给黑帽子带来一个红地毯欢迎与潮流: - /

http://struts.apache.org/release/2.3.x/docs/s2-016.html

基本上它允许执行攻击命令,如下所示:

合法行动:http://host/struts2-showcase/employee/save.action?redirect:%25{3*4} 被剥削的行动:http://host/struts2-showcase/employee/save.action?redirect:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}

虽然我知道升级应该尽快完成,但是由于我们的代码库使用了旧的struts版本和插件,因此我们会尽快完成升级.

这将需要一些重构来升级struts 2库,然后那些需要进行测试等.

我的问题是,是否有人有任何想法阻止此漏洞被执行?这只有在我们能够升级之前.

我想知道在针对OGNL进行评估之前是否可以编写一个拦截器来清理URL,如果是这样的话,它是否会缓解这个问题?

我的其他想法是以某种方式使用Java安全管理器来停止任意进程调用,这可能吗?它会暂时修补这个洞吗?

正在使用的服务器是jBoss,如果有人认为这是相关的.

java security jboss struts2 dmi

6
推荐指数
1
解决办法
1166
查看次数

从 Struts 2.3.12 迁移到 2.3.20 后,动作映射不起作用

目前我在我的项目中使用 Struts 2.3.12,一切正常。现在我需要将 Struts 版本升级到 2.3.20 以解决一些安全问题。

我在我的项目中将 Struts 和所需的 Struts 插件版本更改为 2.3.20pom.xml并构建项目战争。现在,我正在尝试访问我的应用程序主页 URL,然后出现以下异常:

没有为与上下文路径关联的命名空间[/web/public]和操作名称映射的操作。- [未知地点][reset-password!reset][/ims]

com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37)
com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:554)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.josso.tc55.agent.SSOAgentValve.invoke(SSOAgentValve.java:472)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
java.lang.Thread.run(Thread.java:662)
Run Code Online (Sandbox Code Playgroud)

我对正在发生的事情一无所知。

我查看了 struts 2.3.20 的发行说明,但没有得到任何提示。

我正在使用strust2-convention-plugin.

我正在分享我的web.xmlstruts.xml文件。它看起来如下所示:

web.xml

com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37)
com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:554)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) …
Run Code Online (Sandbox Code Playgroud)

java struts2 upgrade dmi action-mapping

5
推荐指数
1
解决办法
3462
查看次数

标签 统计

dmi ×3

struts2 ×3

java ×2

action-mapping ×1

forms ×1

jboss ×1

jsp ×1

security ×1

upgrade ×1