zoukankan      html  css  js  c++  java
  • 【漏洞一】检测到目标URL存在http host头攻击漏洞

    漏洞

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

    原因

    在项目中使用了 request.getServerName 导致漏洞的出现 

    不要使用request中的serverName,也就是说host header可能会在攻击时被篡改,依赖request的方法是不可靠的,形如JSP头部中的:

    String path = request.getContextPath();

    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

    这样的使用方法就会被漏洞检测工具查出来,认定有头攻击漏洞。

    【解决】添加过滤器,使用白名单解决。

    附:http状态码

    200 OK //客户端请求成功
    400 Bad Request //客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
    403 Forbidden //服务器收到请求,但是拒绝提供服务
    404 Not Found //请求资源不存在,eg:输入了错误的URL
    500 Internal Server Error //服务器发生不可预期的错误
    503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
    eg:HTTP/1.1 200 OK (CRLF)

    1、web.xml加过滤器

        <filter>
            <filter-name>hostCleanFilter</filter-name>
            <filter-class>HostCleanFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>hostCleanFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    

      

    2、过滤器实现

    import org.apache.commons.lang.StringUtils;
    import javax.servlet.*;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class HostCleanFilter implements Filter {
        public void init(FilterConfig filterConfig) throws ServletException {
        }
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            String requestHost = request.getHeader("host");
    
            if (requestHost != null && isRightHost(requestHost)){
                response.setStatus(403);
                return;
            }
            chain.doFilter(request,response);
        }
    
        public boolean isRightHost(String requestHost){
            if (!StringUtils.equals(requestHost,"X.X.X.X:8080")
                    &&!StringUtils.equals(requestHost,"A.A.A.A")){
                //域名非法
                return true;
            }
            return false;
        }
    
    
        public void destroy() {
    
        }
    }
    

      

  • 相关阅读:
    论 IntStream 和 for 循环的速度
    单链线性表的基本操作--创建,插入,删除,查看,打印
    Android中的异步处理方式
    Kotlin 集合变换与序列
    Kotlin Lazy延迟初始化
    协程及Kotlin协程
    Java 注解
    Android 事件传递机制进阶
    Java 异常
    Java 多线程及线程间通信(Synchronized和Volatile关键字)
  • 原文地址:https://www.cnblogs.com/651434092qq/p/11506904.html
Copyright © 2011-2022 走看看