【问题标题】:Multiple Submit Buttons Security Risk多个提交按钮安全风险
【发布时间】:2015-07-11 03:55:35
【问题描述】:

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

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

【问题讨论】:

  • 您可以将 javascript 用于多个按钮并将您的数据定向到类似的操作。与使用 struts.xml 相比,它的工作量更大。关于安全问题:您能否更具体地谈谈安全问题?
  • 安全问题在https://struts.apache.org/docs/s2-018.html 中说明。在 2.3.15.3 之前的 Struts 2 中使用 action: 前缀时,在某些情况下,这可以用来绕过安全约束。
  • 要对多个按钮使用javascript,您的意思是触发onclick事件并动态更改动作名称吗?还是你的意思是用ajax来调用?
  • 好的,那它应该在2.3.16.3修复,所以没有问题。
  • 使用仅直接调用操作的脚本,或动态更改操作名称。这种风格的 JS 的好处主要是当你有表单验证时(或者如果你想使用 AJAX 风格的页面,例如将它与 Angular JS 结合使用)

标签: java security jsp struts2 ognl


【解决方案1】:

在 Struts 2.0.0 - Struts 2.3.15.2 版本中发现的与 OGNL 注入攻击相关的漏洞。事实上,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>   

【讨论】:

  • 感谢您的帮助,我将使用javascript实现它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 2011-09-14
  • 2013-04-16
  • 2010-11-24
相关资源
最近更新 更多