CentOS環境下PHP安全性保障方案
sudo yum update -y
命令,保持CentOS系統及所有軟件包(包括PHP、Web服務器、數據庫)為最新版本,及時修補已知安全漏洞。firewalld
精細控制網絡訪問,僅開放必要端口(HTTP的80端口、HTTPS的443端口),執行sudo firewall-cmd --permanent --zone=public --add-service=http
、sudo firewall-cmd --permanent --zone=public --add-service=https
及sudo firewall-cmd --reload
命令生效。/etc/ssh/sshd_config
文件中的Port
指令,降低暴力破解風險。php -m
命令查看已加載模塊,禁用無用模塊(如xdebug
僅在開發環境使用);在/etc/php.ini
中配置disable_functions
指令,禁用eval
、exec
、passthru
、shell_exec
、system
等危險函數,防止命令注入。expose_php = Off
(禁用PHP版本信息泄露)、display_errors = Off
(生產環境關閉詳細錯誤顯示)、log_errors = On
(將錯誤日志記錄到/var/log/php_errors.log
),避免向攻擊者暴露系統細節。open_basedir
指令限制PHP腳本只能訪問指定目錄(如/var/www/html/:/tmp/
),防止惡意腳本遍歷系統文件;配置allow_url_fopen = Off
、allow_url_include = Off
,禁止遠程文件包含和打開,降低遠程代碼執行風險。session.cookie_httponly = On
(防止JavaScript通過document.cookie
獲取會話ID)、session.cookie_secure = On
(僅通過HTTPS傳輸會話Cookie)、session.cookie_samesite = Strict
(防止CSRF攻擊),并配置session.gc_maxlifetime = 1440
(會話有效期15分鐘)。/etc/httpd/conf/httpd.conf
或虛擬主機配置),設置Options -Indexes
(禁止目錄遍歷)、AllowOverride None
(禁用.htaccess
覆蓋,除非必要)、Require all granted
(精確控制訪問權限);隱藏Apache版本信息(ServerTokens Prod
、ServerSignature Off
)。/etc/nginx/nginx.conf
或虛擬主機配置)中,設置location ~ \.php$
塊,使用fastcgi_pass
指向PHP-FPM socket(如unix:/run/php-fpm/www.sock
),并通過fastcgi_param SCRIPT_FILENAME
確保腳本路徑正確;禁用autoindex
模塊(禁止目錄列表)。prepare
方法:$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username'); $stmt->execute(['username' => $username]);
。SELECT
、INSERT
、UPDATE
、DELETE
等必要權限,避免使用root
賬戶連接數據庫。mod_security
模塊增強PHP應用防護,攔截SQL注入、XSS、CSRF等常見攻擊。執行sudo yum install mod_security
安裝,配置規則集(如OWASP Core Rule Set),并啟動服務(sudo systemctl enable mod_security && sudo systemctl start mod_security
)。/etc/php.ini
中開啟OPcache(opcache.enable = 1
),緩存預編譯腳本,提高性能的同時減少源代碼暴露風險;配置opcache.memory_consumption = 128
(內存占用128MB)、opcache.max_accelerated_files = 4000
(最大加速文件數)。/var/www/html
)權限為755
(所有者可讀、寫、執行,組和其他用戶可讀、執行),文件權限為644
(所有者可讀、寫,組和其他用戶可讀);將所有權歸屬給Web服務器用戶(如apache
或nginx
),執行sudo chown -R apache:apache /var/www/html
、sudo chmod -R 755 /var/www/html
。post_max_size = 8M
),僅允許上傳圖片、文檔等安全格式(通過accept
屬性前端驗證+后端MIME類型檢查);將上傳目錄存放在Web根目錄之外(如/var/uploads
),避免直接執行上傳的腳本。fail2ban
工具監控日志(如/var/log/secure
、/var/log/php_errors.log
),自動封禁多次登錄失敗的IP地址;定期檢查系統日志(journalctl -xe
)和Web服務器日志,識別異常訪問(如大量404
錯誤、可疑POST請求)。rsync
或tar
命令備份到異地(如/backup
目錄),并壓縮歸檔(gzip website_backup.tar
);測試備份文件的恢復流程,確保災難發生時可快速還原。filter_var($email, FILTER_VALIDATE_EMAIL)
、手機號用正則表達式),過濾特殊字符(如htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8')
);對輸出到頁面的內容進行編碼,防止XSS攻擊。password_hash()
函數(算法設為PASSWORD_BCRYPT
)對用戶密碼進行哈希存儲,避免明文保存;配置password_verify()
函數驗證密碼,定期提示用戶更換密碼(如每90天)。