LNMP(Linux+Nginx+MySQL+PHP)已成主流 Web 架構。PHP 作為解釋執行語言,靈活性高但攻擊面廣。本文匯總多年生產環境實踐,從配置加固、代碼層面、架構隔離三個維度構建 PHP 安全防線。
; php.ini 或 php-fpm pool 配置
[HOST=www.example.com]
open_basedir = /data/site/www.example.com/:/tmp/
[HOST=api.example.com]
open_basedir = /data/site/api.example.com/:/tmp/
原理:限制 PHP 腳本只能訪問指定目錄樹,防止跨站點文件讀寫。關鍵細節:目錄路徑必須以 / 結尾,否則 /tmp 會匹配 /tmp123 等目錄。PHP 5.3+ 支援此寫法。
disable_functions = show_source,system,shell_exec,passthru,exec,popen,proc_open,proc_get_status,phpinfo,pcntl_exec,ld,dl,set_time_limit,ignore_user_abort
涵蓋命令執行、進程控制、信息洩露三大類。根據業務需要可精減(如需 exec 執行圖片處理),但生產環境原則上全禁用。
display_errors = Off
expose_php = Off
display_errors 防止路徑、數據庫憑證等敏感信息輸出到前端;expose_php 隱藏 HTTP Header 中的 X-Powered-By: PHP/x.x.x,降低針對性攻擊風險。
enable_dl = Off
allow_url_fopen = Off
allow_url_include = Off
allow_url_fopen 不僅是安全隱患,更是性能殺手(同步阻塞遠程請求)。需遠程調用請改用 cURL 異步並發。
session.cookie_httponly = 1
session.cookie_secure = 1 ; 僅 HTTPS 環境
session.use_strict_mode = 1
session.cookie_samesite = Strict
# 目錄結構
/data/site/www.example.com/ # 權限 755,屬主 root:root
/data/site/www.example.com/public/ # 權限 755,屬主 root:root
/data/site/www.example.com/var/ # 權限 770,屬主 www:www ← 唯一可寫目錄
/data/site/www.example.com/vendor/ # 權限 550,屬主 root:root
PHP-FPM 以 www 用戶運行,僅對 var/(緩存、日誌、上傳臨時文件)有寫權限。即使注入 WebShell 也無法落地持久化文件。
┌─────────────┐ API 上傳 ┌──────────────────┐
│ Web 節點 │ ───────────────▶ │ 存儲節點 │
│ (只讀) │ 預簽名 URL │ (靜態服務器/OSS) │
└─────────────┘ └──────────────────┘
│ │
│ 無執行權限 │ 無 PHP 解析
▼ ▼
防 WebShell 持久化 防直接訪問執行
實現方式:
proxy_pass 至上傳服務,或前端直傳 OSS(預簽名 URL)location ~ \.php$ { deny all; }採用 Docker/K8s 將每個站點獨立容器:
| 方案 | 部署位置 | 優勢 | 局限 |
|---|---|---|---|
| ModSecurity + OWASP CRS | Nginx 模組 / 獨立代理 | 規則豐富、社區活躍、零成本 | 誤報率高、性能開銷大、難防 0day |
| OpenRASP / 百度 OpenRASP | PHP 擴展(掛鉤引擎) | 運行時上下文感知、低誤報、可見攻擊鏈 | 需編譯適配 PHP 版本、社區相對較小 |
| 商業 WAF(云鎖、安全狗、阿里云 WAF) | Agent/雲邊協同 | 規則更新及時、管理介面友好、技術支持 | 成本高、數據上雲合規風險、黑盒難定制 |
建議:ModSecurity 做基線防護 + OpenRASP 做深度檢測,關鍵業務上雲 WAF 做 DDoS/CC 緩解。
composer audit、Snyk、Dependabot 定期掃描 vendor 庫┌─────────────────────────────────────┐
│ 邊界層:雲 WAF / 硬件防火牆 / 安全組 │ ← DDoS、CC、已知攻擊特徵
├─────────────────────────────────────┤
│ 接入層:Nginx 限流、IP 黑白名單、HTTPS │ ← 協議異常、暴力破解、掃描器
├─────────────────────────────────────┤
│ 應用層:ModSecurity + OpenRASP │ ← SQLi、XSS、RCE、文件包含
├─────────────────────────────────────┤
│ 代碼層:參數化查詢、輸出編碼、權限檢查 │ ← 業務邏輯漏洞、越權、CSRF
├─────────────────────────────────────┤
│ 運行層:PHP 唯讀、open_basedir、禁用函數 │ ← 利用後滲透、提權、持久化
├─────────────────────────────────────┤
│ 架構層:上傳分離、容器隔離、微服務拆分 │ ← 橫向移動、數據洩露、單點故障
└─────────────────────────────────────┘
安全無絕對,唯有纵深防禦、持續運營、假設失陷、快速響應。