http host頭攻擊漏洞
阿新 • • 發佈:2020-11-04
原文地址: 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配置
- 配置檔案中server_name上設定具體域名.eg:
server_name example.com;
- 在nginx上設定一個default_server處理其他域名來處理預設的請求.即,非設定域名返回一個http status code 4xx 的程式碼
server{
listen 80 default_server;
server_name _;
return 400;
}
Apache配置
- 方法一
ServerName example.com:80 # 指定域名和埠號
新增下列行
UseCanonicalName On # 使用指定的域名和埠號
- 方法二: 修改\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>
- 方法三: 修改\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