多个提交按钮安全风险
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 时才有效。
这些限制对多个按钮的使用产生了副作用,其中 action
或 method
属性用于将 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>
出于某些原因,我需要创建一个带有两个提交按钮的表单,这两个按钮将在提交后调用不同的操作。
我在 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 时才有效。
这些限制对多个按钮的使用产生了副作用,其中 action
或 method
属性用于将 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>