我已经实现了一个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如何检索参数,我可以在哪里删除参数。
答案 0 :(得分:1)
Struts2使用request.getParameterMap()
从请求创建参数映射,并将这些参数放入操作上下文。因此,您可以创建一个拦截器,从上下文中获取这些参数并执行您想要的操作。使用自定义堆栈或覆盖的操作配置向所有操作添加新的拦截器。
答案 1 :(得分:0)
不要混淆过滤器和拦截器,它们是完全不同的东西。
为了让Struts更容易,我建议使用拦截器来防止XSS攻击。在Action Context中使用此参数。
如果您更喜欢使用过滤器,则必须在请求中重新引入修改后的变量,这不是一个好习惯。