温馨提示×

PHP在Linux上如何配置安全

小樊
33
2025-12-24 03:10:43
栏目: 编程语言

Linux上PHP安全配置清单

一 基础与最小化原则

  • 保持系统与PHP版本为最新,及时修补已知漏洞;仅安装必要的扩展,减少攻击面。
  • 以最小权限运行服务:Web与PHP-FPM使用非root专用用户(如www-data),并遵循最小权限原则配置目录与文件。
  • 对输入进行严格校验与过滤,输出到页面时使用htmlspecialchars转义,启用**CSP(内容安全策略)**降低XSS风险。
  • 对数据库访问使用PDO/MySQLi预处理语句防止SQL注入;避免在生产环境暴露调试信息。

二 php.ini关键安全指令

  • 定位配置文件:在Web环境创建phpinfo.php,查看Loaded Configuration File;不同SAPI(Apache/Nginx+PHP-FPM/CLI)可能加载不同副本。修改后需重启对应服务。
  • 建议生产环境关键指令如下(按实际需求微调):
    • 错误与日志
      • display_errors = Off
      • log_errors = On
      • error_log = /var/log/php_errors.log
      • error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
    • 信息泄露与攻击面
      • expose_php = Off
      • allow_url_fopen = Off
      • allow_url_include = Off
    • 危险函数与代码执行
      • disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
    • 文件系统访问
      • open_basedir = /var/www/html:/tmp
    • 会话与Cookie
      • session.cookie_httponly = 1
      • session.cookie_secure = 1(全站HTTPS时启用)
    • 资源与性能(与安全相关)
      • memory_limit = 128M(或按业务调高/调低)
      • max_execution_time = 30
      • opcache.enable=1(性能优化,建议生产开启)
  • 说明:如应用确需远程包含/URL fopen,应改用更安全的库并在调用端做严格校验,而非全局放开。

三 Web服务器与PHP-FPM安全

  • PHP-FPM(/etc/php/7.x/fpm/pool.d/www.conf)
    • 使用非root运行:listen.owner = www-data;listen.group = www-data
    • 套接字权限最小化:listen.mode = 0660
  • Nginx示例(仅处理合法PHP,禁止访问敏感文件)
    • 仅解析.php且限定路径:
      • 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;
      • }
    • 禁止访问版本控制与敏感文件:
      • location ~ /.(ht|git|svn) { deny all; }
    • 全站HTTPS与HSTS(示例)
      • listen 443 ssl; ssl_certificate /path/to/cert.crt; ssl_certificate_key /path/to/key.key;
      • add_header Strict-Transport-Security “max-age=63072000” always;
  • Apache建议
    • 禁用目录列表(Options -Indexes),限制.ht*访问,必要时使用mod_security增强WAF能力。

四 文件权限与隔离

  • 目录与文件所有权
    • Web根目录与上传目录归属www-data,权限755;上传目录禁止执行(如Nginx location ~* .php$ { deny all; })。
    • 配置文件、密钥与备份移出Web可访问路径,或设置不可执行与访问控制。
  • 访问控制增强
    • 使用open_basedir限制脚本可访问目录(如项目根目录与/tmp)。
    • 启用SELinuxAppArmor为PHP-FPM/Apache提供强制访问控制,降低提权与横向移动风险。

五 运行监控与维护

  • 日志与告警
    • 开启PHP错误日志与Web服务访问日志,集中采集并定期审计;对异常状态码、可疑UA、频繁404/403等进行告警。
  • 更新与备份
    • 定期执行系统与软件包更新(如apt/yum),并建立应用与数据库的定期备份与恢复演练流程。
  • 安全测试与加固
    • 使用OWASP ZAP/Burp Suite进行安全扫描;按需引入WAF/IPS;对外部命令执行采用白名单与严格校验。

0