禁用危險函數:通過php.ini
文件禁用可能被遠程執行的函數(如eval()
、exec()
、passthru()
、shell_exec()
等),防止攻擊者通過輸入惡意代碼執行系統命令。例如,在php.ini
中添加:disable_functions = eval,exec,passthru,shell_exec
。
設置錯誤日志路徑與級別:關閉生產環境的錯誤顯示(避免泄露敏感信息),開啟日志記錄并將日志保存到安全目錄。例如:display_errors = Off
、log_errors = On
、error_log = /var/log/php_errors.log
。同時,將error_reporting
設置為E_ALL & ~E_NOTICE & ~E_STRICT
,僅記錄嚴重錯誤。
限制文件操作范圍:使用open_basedir
指令限制PHP腳本只能訪問指定目錄(如Web根目錄),防止惡意代碼遍歷文件系統。例如:open_basedir = /var/www/html/:/tmp/
。
設置正確權限:日志文件應僅能被Web服務器用戶(如apache
、nginx
)和授權管理員訪問。例如,使用chown
將日志文件所有者設為apache
,組設為adm
;用chmod
設置權限為640
(-rw-r-----
):chown apache:adm /var/log/php_errors.log
、chmod 640 /var/log/php_errors.log
。
使用SELinux增強保護:通過SELinux限制對日志文件的寫訪問。例如,為日志目錄設置httpd_sys_rw_content_t
上下文:semanage fcontext -a -t httpd_sys_rw_content_t "/var/log/php_errors.log"
,然后應用上下文:restorecon -v /var/log/php_errors.log
。
配置日志輪轉:使用logrotate
工具自動分割、壓縮舊日志,防止日志文件過大占用磁盤空間。創建/etc/logrotate.d/php
文件,添加以下內容:
/var/log/php_errors.log {
daily
missingok
rotate 7
compress
notifempty
create 640 apache adm
sharedscripts
postrotate
systemctl reload httpd > /dev/null 2>&1 || true
endscript
}
此配置表示每天輪轉日志,保留7天的壓縮日志。
使用專業日志分析工具:借助ELK Stack
(Elasticsearch+Logstash+Kibana)或Splunk
實現日志的集中存儲、實時分析與可視化。例如,通過ELK設置關鍵詞告警(如“SQL injection”“XSS attack”),快速定位異常請求。
自動化監控與告警:使用Fail2Ban
監控日志中的惡意行為(如頻繁的登錄失敗、SQL注入嘗試),自動封禁攻擊IP。例如,創建/etc/fail2ban/jail.local
文件,添加以下規則:
[php-errors]
enabled = true
filter = php-errors
action = iptables[name=PHP, port=80, protocol=tcp]
logpath = /var/log/php_errors.log
maxretry = 5
bantime = 3600
此配置表示當1小時內出現5次PHP錯誤(如SQL注入),則封禁該IP 1小時。
實時監控異?;顒?/strong>:通過grep
、awk
等工具定期檢查日志中的異常關鍵詞(如“Unauthorized”“eval”“union select”)。例如,實時監控PHP錯誤日志:tail -f /var/log/php_errors.log | grep -i "eval\|union select\|sql injection"
。
定期審計日志:每周檢查日志文件,統計惡意請求的數量、來源IP和類型(如SQL注入、XSS、文件上傳漏洞)。例如,使用以下命令統計某IP的失敗登錄次數:grep "Login failed" /var/log/php_errors.log | grep "192.168.1.100" | wc -l
。
驗證日志完整性:通過哈希算法(如SHA256)確保日志未被篡改。在記錄日志時,同時計算內容的哈希值并保存到安全位置(如數據庫);讀取日志時,重新計算哈希值并與保存的值對比,若不一致則說明日志被修改。
應急響應流程:一旦發現可疑活動(如大量惡意請求、敏感文件被訪問),立即采取以下措施:
iptables
封禁);rpm -Va
驗證系統文件完整性);