XssFilter漏洞解决方案

今天老大说,**学校的网站被检查,说是存在漏洞,发过来的技术报告里边我截取了一部分内容如下:

恶意用户可以使用JavaScript、VBScript、ActiveX、HTML语言甚至Flash利用应用的漏洞,从而获取其他用户信息。攻击者能盗取会话cookie、获取账户、模拟其他用户身份,甚至可以修改网页呈现给其他用户的内容。

仅对上述漏洞中威胁较高的漏洞进行验证,请你单位自行验证其他漏洞。

然后检查了一下,我们老大用这样的方式来处理这些问题:
1,在web.xml中添加了
 <!-- XssSqlFilter  漏洞解决方案 -->
         <filter>  
        <filter-name>XssSqlFilter</filter-name>  
        <filter-class>com.xcyg.front.save.XssFilter</filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>XssSqlFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
        <dispatcher>REQUEST</dispatcher>  
    </filter-mapping>
 
2,创建XssFilte类
package com.itcast.front.save;
 
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
 
/**
 * 请求过滤
 * @author yangtong
 * XssFiter 防止sql注入
 */
public class XssFilter implements Filter{
 
    FilterConfig filterConfig = null;  
 
    public void init(FilterConfig filterConfig) throws ServletException {  
        this.filterConfig = filterConfig;  
    }  
 
    public void destroy() {  
        this.filterConfig = null;  
    }  
 
    public void doFilter(ServletRequest request, ServletResponse response,  
            FilterChain chain) throws IOException, ServletException {  
        chain.doFilter(new XssHttpServletRequestWrapper(  
                (HttpServletRequest) request), response);  
    } 
}
 
 
package com.itcast.front.save;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
 
/**
 * XSS请求抓取
 * @author yangtong
 * XssHttpServletRequestWrapper 一个是request包装器,负责过滤掉非法的字符
 */
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper{
 
    public XssHttpServletRequestWrapper(HttpServletRequest request) {
        super(request);
    }
    //覆盖getParameterValues方法,将参数值做xss过滤 
    public String[] getParameterValues(String parameter) {  
      String[] values = super.getParameterValues(parameter);  
      if (values==null)  {  
                  return null;  
          }  
      int count = values.length;  
      String[] encodedValues = new String[count];  
      for (int i = 0; i < count; i++) {  
                 encodedValues[i] = cleanXSS(values[i]);  
       }  
      return encodedValues;  
    }  
    //覆盖getParameter方法,将参数做xss过滤 
    public String getParameter(String parameter) {  
          String value = super.getParameter(parameter);  
          if (value == null) {  
                 return null;  
                  }  
          return cleanXSS(value);  
    }  
    //覆盖getHeader方法,将参数名做xss过滤
    public String getHeader(String name) {  
        String value = super.getHeader(name);  
        if (value == null)  
            return null;  
        return cleanXSS(value);  
    }  
    //转码 将容易引起xss漏洞的半角字符直接替换成全角字符 
    private String cleanXSS(String value) {  
        value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;");  
        value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");  
        value = value.replaceAll("'", "& #39;");  
        value = value.replaceAll("eval\\((.*)\\)", "");  
        value = value.replaceAll("[\\\"\\\'][\\s]*<a href=\"http://lib.csdn.net/base/18\" class=\"replace_word\" title=\"JavaScript知识库\" target=\"_blank\" style=\"color: rgb(223, 52, 52); font-weight: bold;\">javascript</a>:(.*)[\\\"\\\']", "\"\"");  
        value = value.replaceAll("script", "");  
        return value;  
    } 
}
 
在这里十分感谢老大,虽然自己的嘴硬,从来不会说软话,老大杨*帮了我很多,十分感谢,在这里我谢谢老大,没有把我这个菜鸟开了,也感谢老大能带着菜鸟一起飞.菜鸟,飞起来吧!!!

 

posted @ 2017-03-07 11:03  淡淡_java  Views(2400)  Comments(2)    收藏  举报