默認配置下,PHP 會在響應頭暴露版本信息:
X-Powered-By: PHP/7.4.33
攻擊者可通過掃描器批量識別低版本 PHP 服務器,針對性利用已知漏洞(如 HashDoS、反序列化 RCE、內存破壞等)。
; 找到 expose_php = On expose_php = Off
重啟 PHP-FPM/Apache 後生效,響應頭將不再包含 X-Powered-By。
; /etc/php/7.4/fpm/pool.d/www.conf php_admin_flag[expose_php] = off
優點:不影響同服務器其他站點,適合共享主機環境。
ini_set('expose_php', '0'); // ❌ 無效,該屬性為 PHP_INI_SYSTEM,僅啟動時讀取
curl -I https://your-site.com # 修改前 X-Powered-By: PHP/7.4.33 # 修改後 # 無 X-Powered-By 頭
# Nginx fastcgi_hide_header X-Powered-By; # 或主動移除 more_clear_headers 'X-Powered-By'; # 需安裝 headers-more-nginx-module
# Apache (.htaccess 或 httpd.conf) Header unset X-Powered-By Header always unset X-Powered-By
| 配置項 | 推薦值 | 風險等級 |
|---|---|---|
| expose_php | Off | 🟡 中(信息洩露) |
| display_errors | Off (生產) | 🔴 高(路徑/代碼洩露) |
| log_errors | On | 🟢 低(審計需求) |
| error_log | /var/log/php/error.log | 🟢 低 |
| allow_url_fopen | Off | 🟡 中(RFU/RCE 向量) |
| allow_url_include | Off | 🔴 高(遠程代碼執行) |
| session.cookie_httponly | 1 | 🟡 中(XSS 竊取 Cookie) |
| session.cookie_secure | 1 (HTTPS) | 🟡 中(中間人劫持) |
| session.use_strict_mode | 1 | 🟢 低(Session 固定攻擊) |
關閉 expose_php 是 PHP 安全加固的「必做題」,成本極低(一行配置),收益明顯(阻斷自動化掃描指纹識別)。配合 display_errors=Off、session.cookie_httponly=1、Web 服務器層面移除版本頭,構建纵深防禦。建議將此檢查項納入上線清單與定期安全掃描基線。