首页 > Java开发 > servlet过滤器防xss,sql注入.filter里修改parameter参数

servlet过滤器防xss,sql注入.filter里修改parameter参数

这中间起到最关键作用的就是HttpServletRequestWrapper

首先创建一个类继承HttpServletRequestWrapper。然后重写getAttribute,getParameter,getParameterValues,getParameterMap这几个方法。

 

[java][/java]

  1. public class OpRequestWrap extends HttpServletRequestWrapper {
  2.     public OpRequestWrap(HttpServletRequest request) {
  3.         super(request);
  4.     }
  5.     private String format(String name) {
  6.         return StringUtils.replaceEach(name,//
  7.                 new String[]{"\"","'","<",">"},             //
  8.                 new String[]{""","´","<",">"});
  9.         //return StringEscapeUtils.escapeHtml4(name);
  10.     }
  11.     /**
  12.      *
  13.      * @param name
  14.      * @return
  15.      */
  16.     public Object getAttribute(String name) {
  17.         Object value = super.getAttribute(name);
  18.         if (value instanceof String) {
  19.             value = format(String.valueOf(value));
  20.         }
  21.         return value;
  22.     }
  23.     /**
  24.      * 重写getParameter方法
  25.      *
  26.      * @param name
  27.      * @return
  28.      */
  29.     public String getParameter(String name) {
  30.         String value = super.getParameter(name);
  31.         if (value == null)
  32.             return null;
  33.         return format(value);
  34.     }
  35.     /**
  36.      *
  37.      * @param name
  38.      * @return
  39.      */
  40.     public String[] getParameterValues(String name) {
  41.         String[] values = super.getParameterValues(name);
  42.         if (values != null) {
  43.             for (int i = 0; i < values.length; i++) {
  44.                 values[i] = format(values[i]);
  45.             }
  46.         }
  47.         return values;
  48.     }
  49.     /**
  50.      * @return
  51.      */
  52.     public Map<String, String[]> getParameterMap() {
  53.         HashMap<String, String[]> paramMap = (HashMap<String, String[]>) super.getParameterMap();
  54.         paramMap = (HashMap<String, String[]>) paramMap.clone();
  55.         for (Iterator iterator = paramMap.entrySet().iterator(); iterator.hasNext(); ) {
  56.             Map.Entry<String,String[]> entry = (Map.Entry<String,String[]>) iterator.next();
  57.             String [] values = entry.getValue();
  58.             for (int i = 0; i < values.length; i++) {
  59.                 if(values[i] instanceof String){
  60.                     values[i] = format(values[i]);
  61.                 }
  62.             }
  63.             entry.setValue(values);
  64.         }
  65.         return paramMap;
  66.     }
  67. }

然后配置一个过滤器;

 

 

 

[java][/java]

  1. @Override
  2.  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  3.      filterChain.doFilter(new OpRequestWrap((HttpServletRequest) servletRequest),servletResponse);
  4.  }

请仔细看doFilter里面的request,这一步也很重要。它是对request进行包装,才能起到修改request中参数,属性的功能。


本文固定链接: http://www.devba.com/index.php/archives/3844.html | 开发吧

报歉!评论已关闭.