温馨提示×

Linux PHP如何实现安全防护

小樊
42
2025-12-14 06:50:25
栏目: 编程语言

Linux PHP 安全防护实操清单

一 系统与基础加固

  • 保持系统与组件为最新:定期执行系统与安全更新(如 apt update && apt upgrade -y),及时修补 PHP/FPM/Web 服务器漏洞。
  • 精简与隔离:仅安装必要的 PHP 模块(如 php -m 查看并移除无用扩展),降低攻击面。
  • 运行身份与最小权限:以专用低权用户(如 www-data)运行 PHP-FPM,禁止以 root 执行;Web 根目录与配置分离,避免将代码与敏感数据混放。
  • 网络与传输:对外启用 HTTPS/TLS(如 Certbot 申请证书),关闭明文协议与弱加密套件。

二 PHP 运行时安全配置

  • 关闭信息泄露与远程包含:设置 expose_php=Offallow_url_fopen=Offallow_url_include=Off,避免暴露版本与远程文件包含风险。
  • 错误与日志:生产环境 display_errors=Offlog_errors=On,并指定 error_log 写入安全日志目录,便于审计与排查。
  • 禁用危险函数:在 disable_functions 中禁用可执行系统命令与代码注入相关函数,例如:
    disable_functions = exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec,eval,assert,ini_alter,ini_restore,dl,syslog,readlink,symlink,show_source,stream_socket_server,chroot,chgrp,chown,scandir
  • 资源与请求限制:合理设置 max_execution_timemax_input_timememory_limit,并限制 post_max_size 与上传大小,抵御 DoS 与滥用。
  • 文件系统约束:使用 open_basedir 将 PHP 可访问路径限制在 Web 根目录(如 /var/www/html),减少目录遍历与敏感文件读取。
  • 安全提示:如仍见到 safe_mode,应知其为历史配置项,现代 PHP 已移除,改用上述组合策略替代。

三 Web 服务器与执行环境隔离

  • Nginx 安全要点:
    • 禁止上传/静态资源目录执行 PHP:
      location ~ ^/images/.*\.(php|php5)$ { deny all; }
      location ~ ^/static/.*\.(php|php5)$ { deny all; }
      location ~ ^/data/(attachment|avatar)/.*\.(php|php5)$ { deny all; }
      
    • 修正 PATH_INFO 漏洞,避免任意脚本包含:
      if ($request_filename ~* (.*)\.php) { set $php_url $1; }
      if (!-e $php_url.php) { return 404; }
      
    • 仅允许本地 PHP-FPM 处理:
      location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.x-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
      }
      
  • Apache 安全要点:
    • 禁用目录列表与不必要的 AllowOverride,限制对敏感目录的访问;使用 FastCGI 处理 PHP,避免内嵌解析风险。
  • 执行隔离:使用 PHP-FPM 池chroot/jailkit(可选)进一步隔离站点与进程;必要时启用 mod_securityWAF 能力。

四 文件系统与权限模型

  • 最小权限原则:
    • 代码与资源文件:644(rw-r–r–),目录:755(rwxr-xr-x);
    • 可执行脚本(如入口/CLI 工具):755
    • 敏感文件(如 .env/config.php):600/640,仅属主可读写。
  • 上传与缓存目录:可写但不可执行(如 chmod 755 且禁止脚本执行),上传文件存储在独立目录并做类型与内容校验。
  • 批量纠偏与巡查:
    • 查找并修复过度开放权限:find /var/www -type f -perm 0777 -exec chmod 644 {} \;
    • 排查近期被篡改文件:find /data/www -mtime -3 -type f -name "*.php"
    • 查找常见一句话木马特征:grep -r --include=*.php '[^a-z]eval($_POST' .
  • 所有权与进程用户:统一 Web 根目录属主www-data:www-data,确保 PHP-FPM 以该用户运行,避免跨用户写入。

五 应用安全编码与运维监控

  • 输入校验与输出编码:
    • SQL 注入:使用 PDO/MySQLi 预处理语句与参数绑定;
    • XSS:输出使用 htmlspecialchars($s, ENT_QUOTES, ‘UTF-8’)
    • CSRF:关键操作使用 CSRF TokenSameSite Cookie 策略。
  • 文件上传安全:校验 MIME/后缀/文件头,重命名与隔离存储,禁止执行上传目录中的脚本。
  • 命令执行白名单:如确需执行外部命令,使用 白名单escapeshellarg/escapeshellcmd,避免拼接用户输入。
  • 会话与密钥:启用 session.cookie_httponly=1session.cookie_secure=1session.use_strict_mode=1,妥善保护 APP_KEY/DB 口令
  • 日志与监控:开启 PHP 与 Web 访问日志,集中到 SIEM 进行异常检测;定期使用 OWASP ZAP/Burp Suite 做安全扫描与渗透测试。
  • 代码审计与工具:建立 代码审计流程(敏感函数追踪、输入点梳理、注入与上传检查、回归测试),结合 SonarQube、RIPS、Seay 等工具提升覆盖率。

0