AppScan检查到的一些中高危漏洞解决方案

1.appScan 中危漏洞指示跨站点请求伪造尝试成功,尽管其中有假想的“Referer”头

解决办法:在shiro的配置文件中  引入

2.AppScan 发现加密会话(SSL)使用的是没有“secure”属性的 cookie。

解决办法:在shiro的配置文件中 引入

	
	    
		
		
	

2.1再加全局拦截器:



import com.thinkgem.jeesite.common.mapper.JsonMapper;
import com.thinkgem.jeesite.common.utils.StringUtils;

import javax.servlet.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

/**
 * @author zfq
 * @create 2021-12-28 17:44
 *  在cookie上添加 Secure防跨站请求漏洞
 */
public class CsrfDefInterceptorUtil  implements Filter {

    public void destroy() {
        // TODO Auto-generated method stub
        System.out.println("过滤器1销毁方法");
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // TODO Auto-generated method stub
        HttpServletRequest request2 = (HttpServletRequest) request;



        String referer = request2.getHeader("Referer");
        String serverName = request.getServerName();
        //1.判断是否存在外链请求本站
        System.out.println("请求的域名是"+referer);
        Boolean isTongGuo=true;

        if (null != referer && referer.indexOf(serverName) < 0) {
            isTongGuo=false;
        }
        String ctx_path = request2.getContextPath();
        String request_url = request2.getRequestURI();
        String action = request_url.substring(ctx_path.length());
        System.out.println("拦截到的路径action:"+action);

        //2.判断是否有xss攻击
        Map parameterMap = request.getParameterMap();
        if(parameterMap!=null&¶meterMap.size()>0){
            String params= JsonMapper.toJsonString(parameterMap); 		//获取全部请求内容
            System.out.println("拦截前params==========="+params);
            String paramsNew=StringUtils.cleanXSS(params);
            System.out.println("拦截后params==========="+paramsNew);
            //若参数发生变化则说明有不合法字符 则阻止本次提交
            if(!paramsNew.equals(params)){
                isTongGuo=false;
            }
        }


        //3.为cookie加上 Secure 和 HttpOnly属性
        HttpServletResponse response2 = (HttpServletResponse)response;
        Cookie[] cookies = request2.getCookies();
        if(cookies!=null&&cookies.length>0){
            for(Cookie cookie : cookies) {
                cookie.setHttpOnly(true);
                cookie.setSecure(true);
            }
        }
        String sessionid = request2.getSession().getId();
        response2.setHeader("Set-Cookie", "JSESSIONID="+sessionid+";Secure=true;HttpOnly");

        if(isTongGuo){
            chain.doFilter(request, response);
        }else{
            System.out.println("Referer过滤器 => 服务器:{} => 当前域名:{}"+ serverName+"; 而referer是:"+referer);
            response.setContentType("text/html; charset=utf-8");
            response.getWriter().write("拦截到不合法请求,请勿此操作!");
        }
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        // TODO Auto-generated method stub
        System.out.println("过滤器1初始化方法");
    }

}

在web.xml中声明此拦截器 

	
		filterCookie
		xxxx.xx.CsrfDefInterceptorUtil
	
	
		filterCookie
		/*
		
	

 

再看所有请求头中已有Secure 和HttpOnly属性

AppScan检查到的一些中高危漏洞解决方案_第1张图片

2.2.servlet3及以上 在web.xml中引入 http-only 和secure的属性


	MyComm

	
		
			true
			true
		
	



2.3 项目中全局查找有关cookie的操作,把Secure和HttpOnly都设置为true

Cookie cookie = new Cookie(name, null);
cookie.setSecure(true);
cookie.setHttpOnly(true);

2.4 在shiro的认证回调函数中检查对请求参数进行xss拦截,有不合法字符拒绝认证登录

/**
 * 认证回调函数, 登录时调用
 */
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) {

   UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
   //校验是否有xs攻击
   String tokenJson= JsonMapper.toJsonString(token);
   Boolean aBoolean = com.thinkgem.jeesite.common.utils.StringUtils.matchXss(tokenJson);
   if(aBoolean==false){
      throw new AuthenticationException("msg:疑似XSS攻击.");
   }
}

3. 高危漏洞xss攻击      :

        解决办法:mvc全局拦截器处理非法字符 代码见上面的拦截器


4. 高危漏洞sql注入    :

        解决办法:全局sql拦截处理非法sql字符,代码涉及公司代码安全,不再贴出,每个公司的分页拦截器也不一样,只要在分页拦截器中拦截就行

5.伪造请求头Referer

验证请求头Referer是否包含服务名,代码见上面的拦截器


6.高危漏洞 AppScan 识别了不是通过 SSL 发送的登录请求。  

解决办法:ssl证书+https+1,2,3,4,5解决方案

总结:这些处理方案对我们的系统真实有效,大神勿喷,仅供参考

你可能感兴趣的:(系统安全,webview,android,java)