2015-07-11 127 views
2

由於某些原因,我需要創建一個帶有兩個提交按鈕的表單,這些按鈕將在提交後調用不同的操作。多個提交按鈕安全風險

我發現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解決方案不是首選。

+0

您可以使用javascript來處理多個按鈕,並將您的數據引導至類似的動作。這是更多的工作,然後使用struts.xml。就安全問題而言:您能否對安全問題更具體? –

+0

安全問題在[https://struts.apache.org/docs/s2-018.html](https://struts.apache.org/docs/s2-018.html)中說明。在2.3.15.3之前的Struts 2中使用'action:'前綴時,在某些情況下,這可以用來繞過安全約束。 –

+0

要爲多個按鈕使用JavaScript,你的意思是觸發onclick事件並動態更改動作名稱?或者你的意思是使用ajax來調用它? –

回答

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的情況下才起作用。

這些限制在多個鍵的使用方法制成的副作用,其中用於s:submit按鈕結合比在s:form action屬性以外的動作actionmethod屬性。要使用多個按鈕來執行它自己的操作類的方法,您可以傳遞一個包含方法名稱的參數。它可以是隱藏字段或提交字段等。

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> 
+0

謝謝爲你的幫助,我將通過使用JavaScript來實現它 –