2015-08-21 62 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中使用此参数进行播放。

如果你喜欢使用过滤器,你将不得不在请求中重新引入修改后的变量,这是我不是一个好习惯。