• 过滤器解决Struts2重定向漏洞


    编写过滤器控制类

    package cn.csservice.cssdj.action.filter;
    
    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;
    import javax.servlet.http.HttpServletResponse;
    
    
    /**
     * 自定义过滤器:
     * 解决struts2重定向开放漏洞
     * @author shenqz
     *
     */
    public class MyFilter implements Filter{
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            
        }
        
        @Override
        public void doFilter(ServletRequest requ, ServletResponse resp,
                FilterChain chain) throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) requ;
            HttpServletResponse response = (HttpServletResponse) resp;
            //获取url
            StringBuffer url = request.getRequestURL();
            //获取参数
            String param = request.getQueryString();
            if(request.getQueryString() != null){
                String path = null;
                int index = param.indexOf("redirect");
                if(index > 0){
                    path = url.append("?"+param.substring(0, index)).toString();
                    int index2 = path.lastIndexOf("&");
                    if(index2 != -1){
                        response.sendRedirect(path.substring(0, path.length()-1));
                        return;
                    }else{
                        response.sendRedirect(path);
                        return;
                    }
                }else if(index == 0){
                    response.sendRedirect(url.toString());
                    return;
                }
            }
            chain.doFilter(request, response);
        }
    
        @Override
        public void destroy() {
            
        }
    
        
    }

    在web.xml中配置过滤器

    <!-- 解决struts2重定向开放漏洞 -->
         <filter>
    		<filter-name>myfilter</filter-name>
    		<filter-class>
    			cn.csservice.cssdj.action.filter.MyFilter
    		</filter-class>
    	</filter>
    	<filter-mapping>
    		<filter-name>myfilter</filter-name>
    		<url-pattern>*.action</url-pattern>
    	</filter-mapping> 
    
  • 相关阅读:
    选择省市区的组件
    element ui 合计/table show-summary
    双击放大预览功能/组件
    vue 中获取初始的值
    vue 兄弟组件之间通信
    js数组常用到的方法,及其注意事项
    ps
    最有效的学习方法
    css2
    prettytable:像数据库一样格式化输出内容
  • 原文地址:https://www.cnblogs.com/shenqz/p/7232455.html
Copyright © 2020-2023  润新知