struts2如何从请求中读取参数

时间:2015-08-21 12:07:42

标签: java struts2 xss

我已经实现了一个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;
}

几乎所有请求都通过其中一种方法,但是当我使用Struts2模型驱动方法时,不会调用这些方法。 struts如何检索参数,我可以在哪里删除参数。

2 个答案:

答案 0 :(得分:1)

Struts2使用request.getParameterMap()从请求创建参数映射,并将这些参数放入操作上下文。因此,您可以创建一个拦截器,从上下文中获取这些参数并执行您想要的操作。使用自定义堆栈或覆盖的操作配置向所有操作添加新的拦截器。

答案 1 :(得分:0)

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

为了让Struts更容易,我建议使用拦截器来防止XSS攻击。在Action Context中使用此参数。

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