时间:2022-12-06 01:22
struts解决xss攻击的方法:
1.采用struts2的拦截器过滤,将提交上来的参数转码来解决,例如配置struts.xml,代码如下:
<packagename="default"namespace="/"
extends="struts-default,json-default">
<!--配置拦截器-->
<interceptors>
<!--定义xss拦截器-->
<interceptorname="xssInterceptor"class="...此处填写拦截器类名"></interceptor>
<!--定义一个包含xss拦截的拦截栈-->
<interceptor-stackname="myDefault">
<interceptor-refname="xssInterceptor"></interceptor-ref>
<interceptor-refname="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!--这个必须配置,否则拦截器不生效-->
<default-interceptor-refname="myDefault"></default-interceptor-ref>
<action>
...此处省略n个action
</action>
</package>
2.使用Java代码,拦截器实现类,例如:
importjava.util.Map;
importorg.apache.commons.lang3.StringEscapeUtils;
importcom.opensymphony.xwork2.ActionContext;
importcom.opensymphony.xwork2.ActionInvocation;
importcom.opensymphony.xwork2.interceptor.AbstractInterceptor;
publicclassXssInterceptorextendsAbstractInterceptor{
@Override
publicStringintercept(ActionInvocationinvocation)throwsException{
//TODOAuto-generatedmethodstub
ActionContextactionContext=invocation.getInvocationContext();
Map<String,Object>map=actionContext.getParameters();
for(Map.Entry<String,Object>entry:map.entrySet()){
Stringvalue=((String[])(entry.getValue()))[0];
entry.setValue(StringEscapeUtils.escapeHtml4(value));//将提交上来的字符串进行转码
//System.out.println((entry.getValue()));
}
returninvocation.invoke();
}
}