2015-08-21 63 views
1

參數我已經實現了XSS過濾器下面給出,如何Struts2的讀取請求

@Override 
public String getParameter(String parameter) { 
    String value = super.getParameter(parameter); 

    return stripXSS(value); 
} 

@Override 
public String getHeader(String name) { 
    String value = super.getHeader(name); 
    return stripXSS(value); 
} 

private String stripXSS(String value) 
{ 
    System.err.println("Initial Value "+value); 

    if (value != null) 
    { 
     // NOTE: It's highly recommended to use the ESAPI library and uncomment the following line to 
     // avoid encoded attacks. 
     value = ESAPI.encoder().canonicalize(value); 

     System.err.println("Encoded Value "+value); 

     // Avoid null characters 
     value = value.replaceAll("\0", ""); 

     // Remove all sections that match a pattern 
     for (Pattern scriptPattern : patterns){ 
      value = scriptPattern.matcher(value).replaceAll(""); 
     } 

     System.err.println("Pattern Value "+value); 
    } 
    System.err.println("Final Value "+value); 
    return value; 
} 

幾乎所有的請求,通過這些方法之一,但是當我使用一個Struts2的模型驅動的方法,這些方法都不是調用。 struts是如何檢索參數的,我可以去掉這些參數。

回答

1

Struts2使用request.getParameterMap()從請求中創建一個參數映射表,並將這些參數放到動作上下文中。因此,您可以創建一個攔截器,從上下文獲取這些參數並執行所需的操作。使用自定義堆棧或重寫操作配置爲所有操作添加一個新的攔截器。

0

不要混亂過濾器和攔截器,它們是完全不同的東西。

爲了讓Struts更容易,我建議使用攔截器來阻止XSS攻擊。在Action Context中使用此參數進行播放。

如果你喜歡使用過濾器,你將不得不在請求中重新引入修改後的變量,這是我不是一個好習慣。