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() {
    
        }
    }
    

      

  • 相关阅读:
    使用Ansible安装部署nginx+php+mysql之安装php(2)
    使用Ansible安装部署nginx+php+mysql之安装nginx(1)
    Ansible常见问题处理
    4.2、Ansible常用模块
    3.2、Ansible单命令测试
    2、Ansible配置文件详解
    4.1、Ansible模块
    3.3、Ansible命令参数详解
    3.1、Ansible命令简要说明及初步使用
    1、Ansible初识简要介绍及安装
  • 原文地址:https://www.cnblogs.com/651434092qq/p/11506904.html
Copyright © 2011-2022 走看看