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

      

  • 相关阅读:
    Node初学者入门,一本全面的NodeJS教程(转载)
    关于绑定变量的一点心得(转)
    【转】C++11 标准新特性: 右值引用与转移语义
    SVN分支与合并【超详细的图文教程】(转载)
    天猫魔盒屏蔽升级
    大页内存(HugePages)
    反向路径过滤——reverse path filter
    所做更改会影响共用模板Normal.dotm。是否保存此更改
    基于glew,freeglut的imshow
    glfw之hello world
  • 原文地址:https://www.cnblogs.com/651434092qq/p/11506904.html
Copyright © 2011-2022 走看看