Ubuntu PHP安全漏洞如何防范
小樊
32
2025-11-14 22:02:25
Ubuntu PHP安全漏洞防范清单
一 系统与软件更新
- 保持系统与PHP处于最新安全补丁状态,优先使用发行版仓库的版本,及时执行更新并重启相关服务。
- 示例命令:
- 更新与升级:sudo apt update && sudo apt upgrade -y
- 重启服务(按实际使用的模块):sudo systemctl restart apache2 或 sudo systemctl restart php7.4-fpm
- 建议启用无人值守安全更新(如 unattended-upgrades)以减少暴露窗口。
二 PHP运行时关键配置
- 建议将以下参数加入对应 SAPI 的 php.ini(如 /etc/php/7.4/fpm/php.ini、/etc/php/7.4/apache2/php.ini;路径中的版本号按实际替换):
- 隐藏版本与错误信息:
- expose_php = Off
- display_errors = Off
- log_errors = On
- error_log = /var/log/php_errors.log
- 禁用危险函数(按应用需求精简,避免影响功能):
- disable_functions = eval,exec,passthru,shell_exec,system,popen,curl_exec,proc_open,proc_get_status,show_source,parse_ini_file
- 限制远程包含与文件访问:
- allow_url_fopen = Off
- allow_url_include = Off
- open_basedir = /var/www:/tmp(仅允许访问应用与临时目录)
- 文件上传与请求大小(按业务最小化设置):
- file_uploads = On
- upload_max_filesize = 2M
- post_max_size = 8M
- 资源与执行限制:
- max_execution_time = 30
- memory_limit = 128M
- 会话与Cookie安全(可同时在php.ini与应用层设置):
- session.cookie_httponly = On
- session.cookie_secure = On
- session.gc_maxlifetime = 1440
- 性能与安全:
- 启用并正确配置 OPcache(示例):
- opcache.enable=1
- opcache.memory_consumption=128
- opcache.interned_strings_buffer=8
- opcache.max_accelerated_files=4000
- opcache.revalidate_freq=60
- 修改后务必重启对应服务使配置生效。
三 Web服务器与网络层加固
- Apache
- 隐藏版本信息:ServerTokens Prod、ServerSignature Off
- 启用安全模块:sudo a2enmod security2、sudo a2enmod evasive2
- 仅暴露必要接口,禁用目录浏览,限制请求方法(如仅允许 GET/POST)。
- Nginx
- 在 server 配置中限制 PHP 解析与访问敏感文件:
- 典型 PHP 处理:
- location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; }
- 禁止访问 .ht 文件:location ~ /.ht { deny all; }
- 静态资源与上传目录分离,上传目录禁止执行脚本(见下一节)。
- 全站加密
- 使用 Let’s Encrypt 获取免费证书并自动配置 HTTPS:
- Apache:sudo apt install certbot python3-certbot-apache && sudo certbot --apache -d yourdomain.com
- Nginx:sudo apt install certbot python3-certbot-nginx && sudo certbot --nginx -d yourdomain.com
- 边界与访问控制
- 启用 UFW:sudo ufw allow ‘Nginx Full’(或 Apache 对应规则),sudo ufw enable。
四 应用与代码层防护
- 输入与输出安全
- 对所有用户输入进行校验与过滤,输出到页面前进行HTML转义;启用框架自带的 XSS/CSRF 防护。
- 数据库安全
- 使用预处理语句/参数化查询或 ORM 防止 SQL注入;为数据库账户授予最小权限,禁止远程 root 登录。
- 会话管理
- 在应用层设置安全 Cookie:session_start([‘cookie_secure’ => true, ‘cookie_samesite’ => ‘strict’, ‘cookie_httponly’ => true]);
- 登录后重新生成会话ID:session_regenerate_id(true);
- 依赖与漏洞管理
- 使用 Composer 管理依赖并定期更新;使用安全公告检查工具(如 PHP Security Advisories Checker)审计依赖;必要时引入 静态分析/SAST 工具。
- 文件与上传安全
- 上传目录禁止执行脚本(Nginx 示例):
- location /(uploads|assets)/.*.(php|php5|jsp) { deny all; }
- 校验文件类型、大小与扩展名,重命名上传文件,存储于非Web可直接访问路径,设置最小权限。
五 运维与监控
- 文件与目录权限
- Web 根目录属主 www-data:www-data,权限 755;上传与缓存目录可 775 并限制执行权限。
- 日志与告警
- 集中收集并监控 PHP 错误日志、Web 访问日志与 FPM 慢日志;对异常请求、频繁失败登录等进行告警。
- 备份与恢复
- 定期备份代码与数据库,保留离线/异地副本,并进行恢复演练。
- 安全基线巡检
- 定期审查 php.ini 与 Web 服务器配置,验证 HTTPS、禁用函数、open_basedir 等关键项;关注 USN/安全公告 并及时修补。