ubuntu上php安全性如何保障
小樊
37
2025-11-28 18:58:32
Ubuntu上保障PHP安全性的实用清单
一 系统与基础加固
- 保持系统与软件包为最新:执行sudo apt update && sudo apt upgrade,及时修补漏洞。
- 开启防火墙并仅放行必要端口:使用UFW仅开放80/tcp与443/tcp,示例:sudo ufw allow 80/tcp;sudo ufw allow 443/tcp;sudo ufw enable。
- 保护管理入口:禁用root直接SSH登录,使用sudo与密钥登录,降低暴力破解风险。
- 安装Fail2ban监控暴力登录并自动封禁。
- 为全站启用HTTPS/TLS,可用Let’s Encrypt获取免费证书(如:sudo apt install certbot python3-certbot-apache;sudo certbot --apache)。
- 隐藏Web服务版本信息:在Apache中设置ServerTokens Prod与ServerSignature Off,减少信息泄露。
二 PHP运行时关键配置
- 关闭信息泄露与调试输出:设置expose_php = Off、display_errors = Off、log_errors = On,并指定错误日志路径(如:error_log = /var/log/php_errors.log)。
- 禁用危险函数:根据业务需要禁用eval、exec、system、passthru、shell_exec、popen、curl_exec、curl_multi_exec、parse_ini_file、show_source等。
- 限制远程资源包含:设置allow_url_fopen = Off、allow_url_include = Off,降低远程代码执行风险。
- 限制文件系统访问:使用open_basedir仅允许访问必要目录(如:/var/www/html:/tmp)。
- 控制上传与请求:设置upload_max_filesize = 2M、post_max_size = 8M(可按需调整),并限制脚本资源(如:max_execution_time = 30、memory_limit = 128M)。
- 会话安全:开启session.cookie_httponly = On、session.cookie_secure = On,减少会话劫持与XSS窃取风险。
- 连接与加密:如使用PDO/MySQLi务必采用预处理语句防SQL注入;如使用OpenSSL,指定可信CA(如:openssl.cafile=/etc/ssl/certs/ca-certificates.crt)。
三 Web服务器与进程隔离
- Apache加固:启用安全模块mod_security与mod_evasive(如:sudo a2enmod security2;sudo a2enmod evasive2),并结合**.htaccess或VirtualHost**限制目录执行权限与请求方法。
- 进程隔离与权限:优先采用PHP-FPM + Nginx/Apache的FastCGI模式,使用www-data运行Web进程,网站目录建议chown -R www-data:www-data与chmod -R 755;上传目录禁止执行(Nginx示例:location ~* /(uploads|assets)/.*.(php|php5|jsp)$ { deny all; })。
- 配置生效:修改php.ini后需重启对应服务(如:sudo systemctl restart php**{version}**-fpm;sudo systemctl restart apache2 或 sudo systemctl restart nginx)。
四 代码与依赖管理
- 依赖安全:使用Composer并及时更新依赖(composer update),定期运行PHP Security Advisories Checker等工具扫描已知漏洞。
- 安全编码:对所有输入进行过滤/校验,输出进行转义;使用CSRF、XSS、CORS等框架内置防护;数据库统一使用预处理/参数化查询;对敏感操作(登录、支付、权限变更)增加二次校验与速率限制。
五 运维监控与备份恢复
- 日志与告警:启用并集中访问日志与PHP错误日志,对异常状态码、扫描特征、频繁失败登录等进行实时监控与告警。
- 入侵防护:结合Fail2ban与IDS/IPS对暴力破解与可疑流量进行阻断与取证。
- 备份与演练:制定定期全量与增量备份策略,包含代码、配置与数据库,定期恢复演练验证可用性;重要变更前先在测试环境验证。