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防御),减少自行开发的安全隐患。