美文网首页
XSS攻击及防御

XSS攻击及防御

作者: 董董呀 | 来源:发表于2020-04-11 16:53 被阅读0次

    什么是XSS?


    百度百科的解释: XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
    它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制,获取用户的一些信息。


    分类


    1. 非持久型
    2. 持久型
      • 反射型。发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后
        响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析并执行XSS代码,这个过程
        像一次反射,故叫反射型XSS
      • 存储型。存储型和反射型XSS的差别在于提交的代码会存储在服务器端(数据库、内存、文
        件系统等),下次请求目标页面时不用再提交XSS代码
      • DOM。不经过后端,DOM—based XSS漏洞是基于文档对象模型Document Objeet
        Model,DOM)的一种漏洞,dom - xss是通过url传入参数去控制触发的。

    风险


    该漏洞可能被攻击者利用窃取或操纵客户会话和Cookie,它们可能用于模仿合法用户,从而使黑客能够以合法用户身份登录系统进行渗透。可执行攻击者恶意脚本。


    常用修复方式


    • 前、后端对所有参数依次过滤
    • 对之前程序接收参数处添加过滤

    缺点


    • 依次添加,工作量大,容易遗漏
    • 到处可见重复代码
    • 新添加接口很容易将问题重新引入

    过滤器防御实现

    自定义过滤器Filter拦截请求,并对请求参数进行xss过滤处理
     
    /**
     *XSS过滤器
     */
    public class XssFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
     
        }
     
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            //使用包装器
            XSSRequestWrapper XSSRequestWrapper=new XSSRequestWrapper((HttpServletRequest) servletRequest);
            filterChain.doFilter(XSSRequestWrapper,servletResponse);
        }
     
        @Override
        public void destroy() {
     
        }
    
    }
     
    /**
     * Request的包装类
     * 
     */
    public class XSSRequestWrapper extends HttpServletRequestWrapper {
        private Map <String,String[]> paramsMap = null;
     
        public XSSRequestWrapper(HttpServletRequest request) {
            super(request);
            try {
                    request.setCharacterEncoding("UTF-8");
                } catch (UnsupportedEncodingException var8) {
                    var8.printStackTrace();
                }
    
                this.parameterMap = new HashMap();
                Enumeration<String> parameterNames = request.getParameterNames();
                String name = null;
                String[] values = null;
    
                for(List whiteList = Arrays.asList("headerData"); parameterNames.hasMoreElements(); this.parameterMap.put(name, values)) {
                    name = (String)parameterNames.nextElement();
                    values = request.getParameterValues(name);
                    if (values != null && values.length > 0) {
                        for(int itemId = 0; itemId < values.length; ++itemId) {
                            if (!whiteList.contains(name)) {
                                values[itemId] =htmlEncode(values[itemId]);
                            }
                        }
                    }
                }
    
            }
    
            public Enumeration<String> getParameterNames() {
                Vector<String> vector = new Vector(this.parameterMap.keySet());
                return vector.elements();
            }
    
            public Map<String, String[]> getParameterMap() {
                return this.parameterMap;
            }
    
            public String getParameter(String name) {
                String[] results = (String[])this.parameterMap.get(name);
                return results != null && results.length > 0 ? results[0] : "";
            }
    
         private static String htmlEncode(String html) {
            String str = getString(html);
            if (!StringUtil.IsEmpty(str)) {
                str = str.replace("&", "&amp;");
                str = str.replace("<", "&lt;");
                str = str.replace(">", "&gt;");
                str = str.replace("\"", "&quot;");
                str = str.replace("'", "&#39;");
                str = str.replace("\"", "&#34;");
            }
            return str;
        }
    }
       
    

    相关文章

      网友评论

          本文标题:XSS攻击及防御

          本文链接:https://www.haomeiwen.com/subject/filumhtx.html