温馨提示×

Linux服务器PHP如何安全配置

小樊
35
2025-12-31 22:52:56
栏目: 云计算

Linux服务器 PHP 安全配置清单

一 基础与系统层加固

  • 保持系统与组件为最新稳定版,及时打补丁;启用防火墙仅开放必要端口(如 22/80/443),并定期备份网站与数据库。
  • 运行身份与权限:PHP-FPM 以非 root运行(如 www-data),并与 Web 服务器用户一致;限制上传目录执行权限,Web 根目录禁止脚本执行。
  • 网络与传输:全站启用 HTTPS/TLS 1.2+(优先 1.3),配置强加密套件与 HSTS,减少明文与降级攻击面。
  • 安全基线:精简不必要的 PHP 扩展/模块,仅保留业务所需组件,降低攻击面与依赖风险。

二 php.ini 关键安全参数

  • 信息泄露与错误处置
    • 关闭暴露信息:expose_php = Off
    • 生产环境不显示错误:display_errors = Off;开启日志:log_errors = On,指定日志路径:error_log = /var/log/php_errors.log
    • 错误级别:生产建议 error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE,开发可 E_ALL
  • 执行与包含安全
    • 禁用危险函数:disable_functions = exec,system,passthru,shell_exec,proc_open,popen,eval,assert,symlink,link,escapeshellarg,escapeshellcmd
    • 关闭远程文件包含:allow_url_fopen = Offallow_url_include = Off
    • 路径解析安全(Nginx 场景尤需):cgi.fix_pathinfo = 0
  • 会话与 Cookie
    • session.cookie_httponly = 1session.cookie_secure = 1session.use_strict_mode = 1
  • 资源与上传
    • 合理限制:memory_limit = 128M~256Mmax_execution_time = 30max_input_vars = 3000
    • 上传控制:file_uploads = On(不需要则 Off)、upload_max_filesize = 20Mpost_max_size = 22M(需 ≥ 前者)
  • 性能与稳定(安全配套)
    • 开启 OPcacheopcache.enable=1;可按需设置 opcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=4000

三 PHP-FPM 与 Web 服务器配置

  • PHP-FPM 进程与权限
    • /etc/php/8.x/fpm/pool.d/www.conf 中设置:listen.owner = www-datalisten.group = www-datalisten.mode = 0660
    • 确保进程以最小权限运行,与 Web 服务器用户一致,避免越权访问
  • Nginx 示例(FastCGI)
    • 仅通过 HTTPS 提供服务,使用 Unix Socket 与 FPM 通信,避免 TCP 暴露
    • 关键要点:禁用 PHP 执行静态资源目录、正确设置 SCRIPT_FILENAME、限制请求方法、开启安全头

示例 Nginx 片段:

server {
    listen 443 ssl http2;
    server_name yourdomain.com;
    ssl_certificate     /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

    root /var/www/html;
    index index.php index.html;

    location ~ \.php$ {
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_pass   unix:/var/run/php/php8.x-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }

    location /uploads/ {
        location ~ \.php$ { deny all; }  # 禁止在上传目录解析 PHP
    }
}
  • Apache 可选加固
    • 使用 mod_security 等 WAF 模块增强请求过滤
    • 目录访问控制与 .htaccess 合理约束,禁用不必要的模块与解析器

四 应用层安全与运维实践

  • 输入与输出安全
    • SQL 注入:使用 PDO/MySQLi 预处理语句 或 ORM,禁止拼接 SQL
    • XSS:输出到 HTML 时使用 htmlspecialchars 等转义;启用 CSP(Content-Security-Policy) 限制资源加载
    • CSRF:关键操作使用 CSRF Token 校验
  • 文件上传安全
    • 校验文件类型/大小/后缀,重命名存储,隔离到非 Web 可执行目录;必要时使用病毒扫描MIME 类型双重校验
  • 安全头与浏览器防护
    • 配置 Strict-Transport-Security、X-Frame-Options、X-Content-Type-Options、Referrer-Policy、CSP 等 HTTP 安全头
  • 日志、监控与备份
    • 集中收集并定期审计 PHP-FPM、Web 服务器与应用日志;建立变更与回滚流程;定期备份与演练恢复

五 验证与维护

  • 配置生效与语法检查
    • 查看加载的配置文件与生效值:php --iniphpinfo();ini_get('配置项')
    • 语法与配置校验:php-fpm -tnginx -t;变更后平滑重载服务
  • 运行时不可覆盖项
    • FPM Pool 中使用 php_admin_value/php_admin_flag 设置关键安全项,防止应用层通过 ini_set 绕过(如 php_admin_flag[display_errors] = off
  • 持续化与基线化
    • php.ini 与 FPM 配置纳入版本控制(脱敏)自动化部署;定期执行安全基线核查渗透测试/代码审计

0