• JSP中过滤器的设置


    JSP中过滤器的设置

    package com.filter;
    
    import java.io.IOException;
    import java.net.URLDecoder;
    import java.util.Arrays;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Set;
    import java.util.regex.Pattern;
    
    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;
    import javax.servlet.http.HttpServletResponse;
    
    public class SQLFilter implements Filter{
    
        static String reg ="(?:')|(?:--)|(/\*(?:.|[\n\r])*?\*/)|\b(select|update|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute|DBMS_XMLQUERY.GETXML|DBMS_XMLQUERY.NEWCONTEXT)\b|"
                + "\b(?:script|eval|vbscript|javascript|base)\b|(?:[`]+)|(?:<script>)|(?:\b(?:onload|onerror|onunload|onclick|ondblclick)\b)";
        // ?: 只匹配,不缓存匹配到的内容;
        // /\*相当于匹配/*
        // . 表示任意可显示字符
        // \b()\b 表示单独匹配单词
        // [\n\r] 表示只要符合其中的任意一个;[1-9]也可以是一个范围;
    
        static Pattern sqlPattern = Pattern.compile(reg, Pattern.CASE_INSENSITIVE);
        
        @Override
        public void destroy() {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void init(FilterConfig arg0) throws ServletException {
            // TODO Auto-generated method stub
            
        }
        
        
        @Override
        public void doFilter(final ServletRequest req, final ServletResponse resp,
                final FilterChain chain) throws IOException, ServletException {
            
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse)resp;
            
            String uri = request.getRequestURI();
            
            
            Set<String> passURIs = new HashSet<String>();
            passURIs.add("/dsp71025/kdxt/kysj/qlysscyj.jsp");
            passURIs.add("/dsp71025/kdxt/kysj/lkfsl.jsp");
            
            if(passURIs.contains(uri)){
                
            }else{
                Map<String,String[]> params =  request.getParameterMap();
                
                for(String pk : params.keySet()){
                    String[] value = params.get(pk);
                    if(!isValid(value)){
                        System.out.println("参数:"+pk+"的值:"+Arrays.toString(value)+"不合法!");
                        return ;
                    }
                }
            }
            
            chain.doFilter(request, response);
            
        }
    
        private boolean isValid(String[] pValue){
            
            if(pValue != null && pValue.length > 0){
                
                for(int i=0;i<pValue.length;i++){
                    String s = pValue[i];
                    System.out.println("解码前的值: "+s);
                    //"%"编码后为"%25"
                    s = URLDecoder.decode(s.replaceAll("%", "%25"));
                    System.out.println("解码后的值: "+s);
                    if (sqlPattern.matcher(s).find()) {
                        return false;
                    }
                }
                 
            }
            return true;
            
        }
        
    
        
        
        
    }
  • 相关阅读:
    xml转换为json格式时,如何将指定节点转换成数组 Json.NET
    快速删除C#代码中的空白行
    C#编程中的Image/Bitmap与base64的转换及 Base-64 字符数组或字符串的长度无效问题 解决
    Flash设置(各种版本浏览器包括低版本IE)
    使用vcastr22.swf做flash版网页视频播放器
    使用VLC Activex插件做网页版视频播放器
    web项目 在visual studio 输出窗口显示调试信息
    geos 3.6.3库windows版本 已编译完成的32位版本和64位版本
    vs2017 打开附带的localdb v13
    visual studio code 里调试运行 Python代码
  • 原文地址:https://www.cnblogs.com/stono/p/8709987.html
Copyright © 2020-2023  润新知