HTTP 回應標頭預設會洩露:`Server: Apache/2.4.41 (Ubuntu) PHP/7.4.3`。攻擊者可據此鎖定已知漏洞 (CVE) 進行針對性攻擊。
# 只顯示 "Apache",隱藏版本號、OS、模組
ServerTokens Prod
ServerSignature Off
# 進階:使用 mod_headers 移除/修改標頭 (需啟用 mod_headers)
Header unset Server
Header always set Server "WebServer"
# 或完全移除
Header always unset Server
Header always unset X-Powered-By
ServerTokens 選項比較:
| 值 | 回應標頭範例 |
|---|---|
| Prod (推薦) | Server: Apache |
| Major | Server: Apache/2 |
| Minor | Server: Apache/2.4 |
| Minimal | Server: Apache/2.4.41 |
| OS | Server: Apache/2.4.41 (Ubuntu) |
| Full (預設) | Server: Apache/2.4.41 (Ubuntu) PHP/7.4.3 mod_ssl/2.4.41 OpenSSL/1.1.1 |
; 隱藏 X-Powered-By: PHP/7.4.3 標頭
expose_php = Off
修改後必須重啟 Apache:`systemctl reload apache2` 或 `apachectl graceful`
$ curl -I https://example.com
HTTP/1.1 200 OK
Date: Mon, 01 Jan 2024 00:00:00 GMT
Server: Apache
Content-Type: text/html; charset=UTF-8
# 不再出現 PHP 版本、Apache 詳細版本、OpenSSL 版本等
<IfModule mod_headers.c>
# 偽裝為 Nginx
Header always set Server "nginx"
# 或自訂
Header always set Server "MyCustomServer/1.0"
</IfModule>
注意:偽裝可能干擾某些相容性檢查,建議僅隱藏細節而非偽裝。
<IfModule mod_headers.c>
# 防止點擊劫持
Header always set X-Frame-Options "SAMEORIGIN"
# XSS 保護
Header always set X-XSS-Protection "1; mode=block"
# 禁止 MIME 嗅探
Header always set X-Content-Type-Options "nosniff"
# HTTPS 強制 (HSTS)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
# 內容安全政策 (CSP) - 需根據網站調整
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';"
</IfModule>
# nginx.conf
server {
# 隱藏 Nginx 版本
server_tokens off;
# 隱藏 PHP 版本 (需 PHP 設定 expose_php=Off)
fastcgi_hide_header X-Powered-By;
# 自訂 Server 標頭 (需 ngx_headers_more 模組)
# more_set_headers 'Server: MyServer';
}