Struts2 过滤 xss攻击 的一种解决方案

来源:互联网 发布:javascript dom是什么 编辑:程序博客网 时间:2024/05/21 08:56

本方案采用struts2的拦截器过滤,将提交上来的参数转码来解决。
配置struts.xml

<package name="default" namespace="/"        extends="struts-default, json-default">        <!-- 配置拦截器 -->        <interceptors>            <!-- 定义xss拦截器 -->            <interceptor name="xssInterceptor" class="...此处填写拦截器类名"></interceptor>            <!-- 定义一个包含xss拦截的拦截栈 -->            <interceptor-stack name="myDefault">                <interceptor-ref name="xssInterceptor"></interceptor-ref>                <interceptor-ref name="defaultStack"></interceptor-ref>            </interceptor-stack>        </interceptors>        <!-- 这个必须配置,否则拦截器不生效 -->        <default-interceptor-ref name="myDefault"></default-interceptor-ref>        <action>        ...此处省略n个action        </action>    </package>

Java代码,拦截器实现类

import java.util.Map;import org.apache.commons.lang3.StringEscapeUtils;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class XssInterceptor extends AbstractInterceptor{    @Override    public String intercept(ActionInvocation invocation) throws Exception {        // TODO Auto-generated method stub        ActionContext actionContext = invocation.getInvocationContext();        Map<String, Object> map = actionContext.getParameters();        for (Map.Entry<String, Object> entry : map.entrySet()) {            String value =  ((String[])(entry.getValue()))[0];            entry.setValue(StringEscapeUtils.escapeHtml4(value));//将提交上来的字符串进行转码            //System.out.println((entry.getValue()));        }        return invocation.invoke();    }}
2 0
原创粉丝点击