检测到目标URL存在http host头攻击漏洞

具体问题描述:

绿盟检测出“检测到目标URL存在http host头攻击漏洞”,检测报告中有解决办法(在Apache和Nginx里可以通过设置一个虚拟机来记录所有的非法host header。在Nginx里还可以通过指定一个SERVER_NAME名单,Apache也可以通过指定一个SERVER_NAME名单并开启UseCanonicalName选项。)
如果应用程序没有对host header值进行处理,就有可能造成恶意代码的传入。

解决办法
方法一:如果是自己引入的外部tomcat,修改tomcat配置文件server.xml添加访问IP白名单即可

检测到目标URL存在http host头攻击漏洞_第1张图片

方法二:如果是内嵌的tomcat,比如springboot项目,可以选择如下方法
添加过滤器:

package cn.util.filter;


import cn.waner.was.util.RegularUtil;
import org.springframework.beans.factory.annotation.Autowired;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


/**
 *
 * 设置ip访问白名单,防止被头部攻击
 *
 * @author Author
 * create date 2020/5/21
 */


@SuppressWarnings("serial")
@WebFilter("/*")  //声明这个类是过滤器
public class HttpHostFilter extends HttpServlet implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }



 

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        StringBuffer url = request.getRequestURL();
        String s = request.getRequestURL().toString();
        // 头攻击检测  过滤主机名
        String requestHost = request.getHeader("host");
        if (requestHost != null && !checkBlankList(requestHost)) {
            response.setStatus(403);
            return;
        }
        filterChain.doFilter(request, response);
    }

    //判断主机是否存在白名单中
    private boolean checkBlankList(String host){

      /*
      //这一段是用来检测是否有端口,如有去掉端口(根据自己需求看是否要加上)
       if (host.contains(":")){
            host = host.substring(0,host.indexOf(":"));
        }
        */
        //这里host有时候会包括项目端口号,下面白名单IP可以写成一个集合,看集合是否包含当前访问IP
        if (host.contains("192.168.1.12")){
           return true;
        }
  
        return false;
    }
}


,过滤器配置,最后在Application启动类中加上如下注解

@ServletComponentScan(basePackages = "cn.util.filter")  //声明扫描包路径

你可能感兴趣的:(java基础,安全服务)