【漏洞一】檢測到目標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() {

    }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM