Ubuntu PHP安全配置要点
保持Ubuntu系统和PHP为最新稳定版本,及时修复已知安全漏洞。运行以下命令更新系统及PHP相关包:
sudo apt update && sudo apt upgrade
安装PHP时选择最新稳定版本(如PHP 8.2),避免使用已停止维护的旧版本。
生产环境中关闭详细错误显示,防止敏感信息(如数据库结构、路径)泄露:
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
将错误日志记录到非Web可访问目录。
禁用可能被滥用的函数(如执行系统命令、代码注入相关),根据应用需求调整列表:
disable_functions = exec,passthru,shell_exec,system,eval,assert,popen,phpinfo
。
使用open_basedir
限制PHP脚本只能访问指定目录(如网站根目录),防止遍历到系统敏感文件:
open_basedir = /var/www/html:/tmp
注意:多个目录用冒号分隔,且需包含临时目录(如/tmp
)。
增强会话安全性,防止会话劫持和固定攻击:
session.cookie_httponly = On
(禁止JavaScript访问会话cookie)
session.cookie_secure = On
(仅通过HTTPS传输会话cookie)
session.gc_maxlifetime = 1440
(会话有效期1440秒,约24分钟)。
禁用远程文件包含(RFI)和远程代码执行:
allow_url_fopen = Off
allow_url_include = Off
防止通过URL加载远程文件或包含远程脚本。
启用PHP模块并禁用目录列表:
sudo a2enmod php{version}
(如php8.2
)
sudo systemctl restart apache2
在虚拟主机配置中添加Options -Indexes
,禁止显示目录内容。
调整PHP-FPM池设置(如/etc/php/{version}/fpm/pool.d/www.conf
),限制资源使用:
pm.max_children = 50
(最大子进程数)
request_terminate_timeout = 30
(脚本执行超时30秒)
rlimit_files = 1024
(每个进程最大文件描述符数)。
启用ModSecurity(Web应用防火墙),防御SQL注入、XSS等常见攻击:
sudo apt install libapache2-mod-security2
sudo a2enmod security2
配置规则集(如OWASP Core Rule Set)。
安装Fail2Ban防止暴力破解(如SSH、Web登录):
sudo apt install fail2ban
复制配置文件并启用:
sudo cp /etc/fail2ban/jail.local /etc/fail2ban/jail.local.local
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
。
限制上传文件大小和类型,避免恶意文件执行:
upload_max_filesize = 2M
post_max_size = 8M
file_uploads = On
在应用层验证文件类型(如通过MIME类型),上传后重命名文件(如添加时间戳前缀),并将上传目录设置为不可执行(chmod -x /var/www/html/uploads
)。
使用强密码策略(如包含大小写字母、数字、特殊字符),限制数据库用户权限(仅授予必要权限):
GRANT SELECT, INSERT, UPDATE, DELETE ON yourdatabase.* TO 'youruser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
FLUSH PRIVILEGES;
避免使用root用户连接数据库。
使用Certbot安装SSL/TLS证书,强制HTTPS传输:
sudo apt install certbot python3-certbot-nginx
(Nginx)或python3-certbot-apache2
(Apache)
sudo certbot --nginx -d yourdomain.com
配置重定向(如将HTTP请求重定向至HTTPS)。
要求用户设置复杂密码(如最小长度8位、包含大小写字母、数字、特殊字符),定期更换密码。
启用并监控PHP错误日志、访问日志,使用入侵检测系统(IDS)识别可疑活动:
tail -f /var/log/php_errors.log
(实时查看错误日志)
sudo apt install fail2ban
(监控暴力破解尝试)
定期分析日志,及时响应异常(如大量404请求、SQL错误)。
定期检查代码中的安全漏洞(如SQL注入、XSS),使用自动化工具(如PHPStan、Psalm)辅助检测。
定期更新PHP依赖库(如Composer包),修复第三方库的安全漏洞:
composer update
composer audit
(检查依赖库漏洞)。