2012-09-18 43 views
1

我正在使用我的struts2應用程序來解決參數篡改問題。我聽說這可以通過在我的動作中實現ParameterNameAware接口來解決,但是我沒有找到解釋這種情況的最佳示例。任何人都可以提供一個關於如何使用ParameterNameAware的好例子。快速解答將非常感激。使用ParameterNameAware接口避免參數篡改(Struts2)

回答

1

有關此接口的全部想法是維護一個有效參數名稱的列表,並通過拒絕不在此列表中的任何請求參數(白名單)。這對於黑客試圖包含不需要的表單的情況非常有用字段值作爲可能在某些情況下執行的隱藏變量。例如,包括可能會在服務器端創建拒絕服務的很多表單字符變量(> 10000等)。

一旦實現了這一點,你可以立刻拒絕任何不想要的參數在當前請求的範圍,或者你可以利用這種情況更好的控制。

可能實現:

落實ParameterNameAware接口並覆蓋其acceptableParameterName方法如下:

public boolean acceptableParameterName(String parameterName) { 

      boolean allowedParameterName = true ; 

      if (parameterName.contains("session") || parameterName.contains("request")) { 

        allowedParameterName = false ; 

      } 

      return allowedParameterName; 
    } 

你需要實現你的form bean這個接口,其中具有getter和setter方法。在這個特定的例子中,如果當前請求包含任何表單字段變量,如請求或會話,那麼這是一個失敗的情況。這只是一個典型的例子。有一個在這個環節 Class ParametersInterceptor

+0

thanx的響應完整的文檔。我對此很困惑,意思是說這個過程。多久可以調用acceptableParameterName(),並在我的操作類中找到可接受的參數(白名單)(是否所有變量都帶有setter和getters用於操作?)。正如你所說的那樣,當攻擊者用更多的參數改變查詢字符串時,如何在沒有定義輸入數據變量的情況下被我們的動作類接受,它必須顯示404錯誤。如果我混淆你,我真的很興奮。 newbie struts2 :-) – Rony

+0

@Rocky_Rony,你的白名單隻不過是預定義的表單字段變量集合,你需要在你的bean類中實現這個接口。我已經更新了我的答案。 – UVM