1

我已经实现了一个 XSS 过滤器,如下所示,

@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;
}

几乎所有请求都通过这些方法之一,但是当我使用 Struts 2ModelDriven方法时,这些方法不会被调用。

Struts 如何检索参数,我可以在哪里剥离参数?

4

2 回答 2

1

MapStruts2从requestusing创建一个参数request.getParameterMap()并将这些参数放到ActionContext.

因此,您可以创建一个拦截器,该拦截器从上下文中获取这些参数并执行您想要的操作。使用自定义堆栈或覆盖的操作配置向所有操作添加新的拦截器。

于 2015-08-21T18:33:44.160 回答
0

不要混淆过滤器和拦截器,它们是完全不同的东西。

为了使 Struts 更容易,我建议使用拦截器来防止 XSS 攻击。在动作上下文中使用此参数。

如果您更喜欢使用过滤器,则必须在请求中重新引入修改后的变量,这不是一个好习惯。

于 2015-08-23T16:17:33.873 回答