多个提交按钮安全风险

Multiple Submit Buttons Security Risk

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

我在 Multiple Submit Buttons 中找到了以下示例:

<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 解决方案不是首选。

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

之前它是在 S2-016, the fixed version was 2.3.15.1. Lately S2-018 was introduced and they disabled the action: prefix. Recommended upgrade was 2.3.15.3 中发现的。

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

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

当调用 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>