PHP 以模組形式運行於 Web 伺服器(本文以 Apache 為例),伺服器安全的前提是作業系統安全。建議採用 chroot 監獄 啟動 Apache,將進程限制在獨立目錄樹中。即使 PHP 腳本或 Apache 本身存在漏洞,攻擊者也只能觸及受限環境,無法危害宿主系統。
localhost Unix Socket,必須改用 127.0.0.1 TCP 連線,效能微幅下降但安全性大增。php.ini 預設 SMTP = localhost 僅針對 Win32;chroot 內需獨立配置 sendmail 路徑與權限。/tmp、/var/lib/php/session),採用 nosuid,noexec,nodev 掛載參數。| 影響版本 | 漏洞類型 | 嚴重度 | 修復版本 |
|---|---|---|---|
| PHP < 4.1.2 | 檔案上傳遠端緩衝區溢位 | 極高(RCE) | ≥ 4.1.2 |
| 4.2.0 ~ 4.2.1 | multipart/form-data POST 遠端拒絕服務 | 高(DoS) | ≥ 4.2.2 |
| 4.0.5 ~ 4.2.2 | mail() 第五參數繞過 safe_mode 執行命令 | 極高(RCE) | ≥ 4.2.3 |
4.0.5 簡單利用:mail("evil@domain.com", "", "", "", "; /usr/bin/id") 直接注入 Shell 命令。
4.0.6~4.2.2 利用 sendmail -C:構造偽造郵件配置檔,通過 mail(..., "-C/tmp/fake_cf") 實現任意命令執行。
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,mail,putenv(視業務保留 mail)。open_basedir = /var/www/html:/tmp:/var/lib/php/session。安全非一次性配置,而是持續的過程:最小權限原則 + 及時修補 + 深度防禦 + 入侵檢測。將「升級到最新受支援版本」寫入團隊 SOP,是成本最低、收益最高的安全投資。