1. 系统与PHP版本更新
保持Ubuntu系统和PHP及其扩展为最新版本,及时修复已知安全漏洞。使用以下命令更新系统及PHP:
sudo apt update && sudo apt upgrade -y sudo apt install php php-cli php-fpm php-mysql php-curl php-xml php-zip --only-upgrade
2. PHP配置文件(php.ini)安全优化
通过调整php.ini
关键参数,降低安全风险:
display_errors = Off log_errors = On error_log = /var/log/php_errors.log
disable_functions = eval,exec,system,passthru,shell_exec,curl_exec,proc_open
upload_max_filesize = 2M post_max_size = 8M file_uploads = On
expose_php = Off
max_execution_time = 30 memory_limit = 128M
3. Web服务器安全配置
根据使用的Web服务器(Apache/Nginx)调整配置,增强防护:
xmlrpc
),隐藏版本信息,启用mod_security
(Web应用防火墙)。sudo a2dismod xmlrpc sudo sed -i 's/ServerTokens OS/ServerTokens Prod/' /etc/apache2/conf-available/security.conf sudo a2enmod security2 sudo systemctl restart apache2
xmlrpc.php
),仅允许可信IP访问登录页面。location = /xmlrpc.php { deny all; } location = /wp-login.php { allow 192.168.1.1; deny all; }
4. 安全模块启用
利用Ubuntu自带的安全模块限制PHP进程权限:
usr.sbin.php-fpm
),限制PHP对系统资源的访问。sudo aa-enforce /etc/apparmor.d/usr.sbin.php-fpm sudo aa-status # 查看状态
sudo ufw allow 'Apache Full' # 或 'Nginx Full' sudo ufw enable
5. 代码与数据安全实践
遵循安全编码规范,防范常见攻击:
$name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?"); $stmt->execute([$email]); $user = $stmt->fetch();
password_hash()
函数存储密码(推荐PASSWORD_DEFAULT
算法)。$hashed = password_hash($password, PASSWORD_DEFAULT);
session_start(); ini_set('session.cookie_httponly', 1); ini_set('session.cookie_secure', 1); # 仅HTTPS传输 ini_set('session.gc_maxlifetime', 1800); # 30分钟
6. HTTPS加密与认证
使用SSL/TLS证书加密数据传输,防止中间人攻击:
sudo apt install certbot python3-certbot-apache # Apache sudo certbot --apache -d yourdomain.com
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
7. 日志监控与定期审计
实时监控系统活动,及时发现异常:
sudo tail -f /var/log/apache2/error.log sudo tail -f /var/log/php_errors.log
auditd
监控关键目录(如PHP文件目录)。sudo apt install auditd sudo auditctl -w /var/www/html -p wa -k php_files
composer audit
)。8. 文件与目录权限管理
设置合理权限,防止未授权访问:
www-data
)。sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type d -exec chmod 755 {} \; sudo find /var/www/html -type f -exec chmod 644 {} \; sudo chmod 600 /var/www/html/config.php