1. 保持PHP及系統更新
定期更新Ubuntu系統和PHP至最新版本,及時修復已知安全漏洞。使用以下命令完成更新:
sudo apt update && sudo apt upgrade -y
sudo apt install php php-cli php-fpm php-mysql php-curl php-xml php-zip php-gd php-mbstring php-bcmath --only-upgrade
2. 優化PHP.ini核心安全配置
通過修改php.ini
文件(路徑可通過php --ini
查看)調整關鍵參數,降低安全風險:
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
disable_functions = eval,exec,passthru,shell_exec,system,proc_open,pcntl_exec,escapeshellcmd,base64_decode
upload_max_filesize = 2M
post_max_size = 8M
file_uploads = On
session.cookie_httponly = On # 禁止JavaScript訪問會話Cookie
session.cookie_secure = On # 僅通過HTTPS傳輸會話Cookie
session.gc_maxlifetime = 1440 # 會話有效期(分鐘)
allow_url_fopen = Off
allow_url_include = Off
max_execution_time = 30 # 腳本最大執行時間(秒)
max_input_time = 30 # 輸入數據處理時間(秒)
memory_limit = 128M # 單個腳本最大內存使用量
3. 配置Web服務器安全
根據使用的Web服務器(Apache/Nginx)調整配置,確保PHP處理安全:
autoindex
)。sudo a2enmod php7.x # 替換為實際PHP版本(如php8.1)
sudo a2dismod autoindex
sudo systemctl restart apache2
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.x-fpm.sock; # 替換為實際PHP-FPM socket路徑
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
sudo systemctl restart nginx
4. 利用安全模塊限制進程權限
使用Ubuntu自帶的AppArmor
限制PHP進程的訪問范圍,防止越權操作:
sudo aa-status # 查看AppArmor狀態(確保已啟用)
sudo nano /etc/apparmor.d/usr.sbin.php-fpm # 編輯PHP-FPM配置文件
# 添加限制規則(示例:禁止訪問/etc/shadow)
deny /etc/shadow rwx,
sudo systemctl reload apparmor
5. 強化會話與身份認證
sudo apt install certbot python3-certbot-apache # Apache
sudo certbot --apache -d yourdomain.com
password_hash()
函數存儲用戶密碼(支持bcrypt、Argon2等算法)。$hashed_password = password_hash($_POST['password'], PASSWORD_DEFAULT);
6. 監控與審計
/var/log/php_errors.log
)和Web服務器日志,識別異常請求(如大量404錯誤、SQL注入嘗試)。auditd
監控PHP相關目錄(如/var/www/html
)的文件修改和訪問行為。sudo apt install auditd
sudo auditctl -w /var/www/html -p wa -k php_files # 監控寫入和屬性變更
sudo ausearch -k php_files | aureport -f -i # 查看報告
7. 文件與目錄權限管理
確保PHP文件和目錄的權限設置合理,防止未授權訪問:
sudo chown -R www-data:www-data /var/www/html # 將所有權賦予Web服務器用戶(如www-data)
sudo find /var/www/html -type d -exec chmod 755 {} \; # 目錄權限755
sudo find /var/www/html -type f -exec chmod 644 {} \; # 文件權限644
sudo chmod 600 /var/www/html/config.php # 敏感文件(如配置文件)權限600
8. 使用安全框架與庫
優先采用經過安全審計的PHP框架(如Laravel、Symfony),利用其內置的安全功能(如CSRF防護、SQL注入過濾、XSS防御),減少自行開發的安全隱患。