温馨提示×

Ubuntu如何提升PHP安全性

小樊
42
2025-11-22 21:11:37
栏目: 编程语言

Ubuntu提升PHP安全性的实用清单

一 基础加固

  • 保持系统与PHP为最新版本,及时修补漏洞:执行sudo apt update && sudo apt upgrade
  • 隐藏PHP版本信息,避免被针对性攻击:在 php.ini 中设置expose_php = Off
  • 关闭错误回显、开启错误日志,防止敏感信息泄露:设置display_errors = Offlog_errors = On,并指定日志路径如error_log = /var/log/php_errors.log
  • 精简攻击面:仅安装必要的PHP扩展,禁用不需要的模块(例如不需要则禁用FTP相关模块)。
  • 修改后重启服务生效:如sudo systemctl restart php7.4-fpmsudo systemctl restart apache2

二 PHP运行时关键配置

  • 禁用危险函数:在 php.ini 中设置disable_functions = eval,exec,system,passthru,shell_exec,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source(按应用实际白名单化保留)。
  • 限制远程资源包含与读取:设置allow_url_fopen = Offallow_url_include = Off
  • 上传安全:限制大小与类型,建议upload_max_filesize = 2Mpost_max_size = 8M;上传目录禁止执行脚本(见第四部分Nginx示例)。
  • 资源与执行限制:设置max_execution_time = 30memory_limit = 128M,降低DoS风险。
  • 会话安全:开启session.cookie_httponly = Onsession.cookie_secure = On,并在代码中执行session_regenerate_id(true);为Cookie设置SameSite=Strict
  • 文件系统隔离:按需使用open_basedir限制脚本可访问目录(如仅允许**/var/www/tmp**),减少目录遍历风险。

三 服务器与网络层防护

  • 全站启用HTTPS/TLS:使用Let’s Encrypt获取免费证书,Apache执行sudo apt install certbot python3-certbot-apache后运行sudo certbot --apache -d yourdomain.com;Nginx可用python3-certbot-nginx
  • 防火墙最小化开放:启用UFW,仅放行80/443SSH(如sudo ufw allow 'Nginx Full’sudo ufw allow ‘Apache Full’,以及sudo ufw allow ‘OpenSSH’)。
  • Web应用防火墙与防暴力:部署ModSecurity(Apache)与fail2ban,缓解常见Web攻击与暴力破解。
  • 隐藏服务器标识:Apache设置ServerTokens ProdServerSignature Off,降低信息泄露。

四 文件权限与Web服务器配置

  • 文件与目录权限:网站根目录建议chown -R www-data:www-data /var/www/htmlchmod -R 755 /var/www/html,上传目录单独设置更严格权限。
  • Apache建议:在虚拟主机或目录配置中关闭目录索引(Options -Indexes),避免泄露目录结构。
  • Nginx建议:将PHP处理与静态资源分离,并对上传目录禁止解析PHP,示例:
    • 处理PHP:
      • location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; }
    • 禁止上传目录执行:
      • location /(uploads|assets)/.*.(php|php5|jsp) { deny all; }
    • 禁止访问.ht*文件:
      • location ~ /.ht { deny all; }
  • 修改后重启对应服务使配置生效。

五 应用与运维实践

  • 依赖与漏洞管理:使用Composer管理依赖并执行composer update;定期使用PHP Security Advisories Checker等工具扫描依赖安全。
  • 安全编码:对数据库访问使用预处理语句/参数化查询防止SQL注入;输出到页面前进行输出编码以缓解XSS
  • 密码存储:使用**password_hash() / password_verify()**进行安全哈希,禁止明文或弱哈希。
  • 备份与演练:定期备份代码与数据库(如rsyncmysqldump),并验证恢复流程。
  • 持续监控:启用并监控访问日志/错误日志,结合IDS/IPS或集中化日志平台及时发现异常。

0