多个提交按钮安全风险

时间:2015-07-11 03:55:35

标签: javascript java jsp security struts2

由于某些原因,我需要创建一个带有两个提交按钮的表单,这些按钮将在提交后调用不同的操作。

我在https://struts.apache.org/docs/multiple-submit-buttons.html

中找到了以下示例
<s:form method="post" action="mySubmitAction">
    <s:submit value="Submit"/>
    <s:submit value="Clear" action="myClearAction"/>
</form>

由于我的项目使用的是struts 2.3.16.3,因此需要struts.mapper.action.prefix.enabled = true

但是,在struts 2.3.16.3中是否有任何风险可以恢复? 它会在2.3.15.2中共享相同的安全问题吗?

如果是,您是否介意提供一些替代方案以使多个提交按钮在单个表单上工作? if-else解决方案不是首选。

1 个答案:

答案 0 :(得分:1)

Struts 2.0.0版本中发现的漏洞 - 与OGNL注入攻击相关的Struts 2.3.15.2。事实上,action:前缀为此类攻击打开了一扇大门。

以前在S2-016中发现,固定版本为2.3.15.1。最近引入了S2-018,他们禁用了action:前缀。建议升级为2.3.15.3

这意味着不鼓励使用action:前缀,您可以自行承担风险。在S2-019中,默认情况下DMI也被禁用,因此您不能使用method:前缀,因为它仅在启用DMI时才有效。

这些限制对多个按钮的使用产生了副作用,其中actionmethod属性用于将s:submit按钮绑定到除s:form操作属性之外的操作。要使用多个按钮来执行自己的操作类方法,可以传递包含方法名称的参数。它可以是隐藏字段或提交字段等。

调用execute方法时,此信息应该已经可用,您可以使用Java通过名称调用方法。另一种方法是在提交表单之前使用javascript修改onclick事件处理程序中的表单的action属性。

<s:form name="myForm" method="post" action="mySubmitAction" >
    <s:submit value="Submit"/>
    <s:submit value="Clear" onclick="myClearAction()"/>
</form>  
<script>
   function myClearAction(){
     document.forms["myForm"].action = "<s:url action='myClearAction' />";
   }
</script>