http host頭攻擊漏洞


原文地址: https://www.zhuyilong.fun/tech/handel_httphost_attack.html


漏洞描述

為了方便的獲得網站域名,開發人員一般依賴於HTTP Host header。例如,在php里用_SERVER["HTTP_HOST"]。但是這個header是不可信賴的,如果應用程序沒有對host header值進行處理,就有可能造成惡意代碼的傳入。

解決辦法

web應用程序應該使用SERVER_NAME而不是host header。
在Apache和Nginx里可以通過設置一個虛擬機來記錄所有的非法host header。在Nginx里還可以通過指定一個SERVER_NAME名單,Apache也可以通過指定一個SERVER_NAME名單並開啟UseCanonicalName選項。

具體步驟

項目代碼

程序編寫中避免使用HTTP_HOST,如有需要使用SERVER_NAME替代

nginx配置

  1. 配置文件中server_name上設置具體域名.eg:
    server_name example.com;
  1. 在nginx上設置一個default_server處理其他域名來處理默認的請求.即,非設置域名返回一個http status code 4xx 的代碼
server{
    listen       80  default_server;
    server_name  _;
    return       400;
}

Apache配置

  1. 方法一: 修改\conf\httpd.conf配置文件中server_name,設置具體域名.eg:
    ServerName example.com:80  # 指定域名和端口號

添加下列行

    UseCanonicalName On # 使用指定的域名和端口號
  1. 方法二: 修改\conf\httpd.conf文件,參考以下配置添加:
    NameVirtualHost 127.0.0.1
    
    <VirtualHost 127.0.0.1>
    
    ServerName 127.0.0.1
    
    <Location />
    
    Order Allow,Deny
    
    Deny from all # 拒絕直接通過IP地址的任何訪問
    
    </Location>
    
    </VirtualHost>
    
        
    
    <VirtualHost 127.0.0.1>
    
    DocumentRoot "C:\www\example"
    
    ServerName example.com # 僅允許通過域名訪問
    
    </VirtualHost>
  1. 方法三: 修改\conf\httpd.conf文件,找到"#LoadModule rewrite_module modules/mod_rewrite.so"去除前面的"#"號,添加類似以下配置:
    RewriteEngine on

    RewriteCond %{HTTP_HOST} !^127.0.0.1$ [NC]

    RewriteRule ^(.*)$ /error.html

配置修改后都需要重啟nginx/apache


免責聲明!

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



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