温馨提示×

Linux中PHP安全问题怎么解决

小樊
42
2025-12-22 04:09:18
栏目: 编程语言

Linux下PHP安全加固与处置清单

一 运行环境与组件加固

  • 保持更新:及时升级 PHP、Web 服务器(Nginx/Apache)、数据库与依赖库,修复已知漏洞。
  • 精简组件:用 php -m 查看并移除不必要的 PHP 模块,降低攻击面。
  • 信息泄露防护:在 php.ini 或 /etc/php.d/security.ini 中设置 expose_php=Off,隐藏 PHP 版本。
  • 远程代码执行防护:关闭 allow_url_fopen=Off、allow_url_include=Off,避免远程文件包含与代码注入。
  • 错误与日志:生产环境 display_errors=Off、log_errors=On,并配置 error_log 写入专用日志文件。
  • 资源限制:设置 max_execution_time、max_input_time、memory_limit,抑制滥用与 DoS。
  • 危险函数禁用:在 disable_functions 中禁用 exec、passthru、shell_exec、system、proc_open、popen、curl_exec、curl_multi_exec、parse_ini_file、show_source 等。
  • 文件系统访问限制:使用 open_basedir 将 PHP 可访问目录限制在站点根目录(如 /var/www/html)。
  • 请求体大小:设置 post_max_size 合理上限,防止超大请求耗尽资源。
  • 上传功能:业务无需上传时设 file_uploads=Off;确需上传时仅允许白名单类型、随机化文件名、隔离存储且禁止执行。

二 Web服务器与执行隔离

  • 禁止静态资源执行 PHP:在 Nginx 将上述目录的 PHP 解析放在通用 PHP 匹配规则之前,例如:
    • location ~ ^/images/.*.(php|php5)$ { deny all; }
    • location ~ ^/static/.*.(php|php5)$ { deny all; }
    • location ~ ^/data/(attachment|avatar)/.*.(php|php5)$ { deny all; }
  • 修正 PATH_INFO 漏洞:在 FastCGI 公共配置顶部加入路径存在性校验,防止伪装后缀执行。
  • 进程隔离与权限:以 www-data 等低权用户运行 PHP-FPM/Apache;上传目录仅赋予 www-data 写权限,禁止执行;Web 根目录禁止写入可执行脚本。
  • 传输安全:全站启用 HTTPS/TLS,强制跳转,保护凭据与会话。

三 安全编码要点

  • SQL 注入:使用 PDO/MySQLi 预处理语句 或 ORM,严禁字符串拼接。
  • XSS:输出到页面前使用 htmlspecialchars($s, ENT_QUOTES, ‘UTF-8’) 转义。
  • 文件包含:避免动态包含用户输入,采用 白名单 或映射表控制可包含文件。
  • 远程代码执行:禁用或避免 eval/assert/preg_replace(e) 等危险用法;必要时严格校验与沙箱化。
  • 文件上传:校验 MIME 类型/文件头/扩展名,重命名与隔离存储,上传目录 Nginx/Apache 禁止解析 PHP
  • CSRF:为敏感操作使用 CSRF Token(会话绑定、一次性、强比较)。
  • 会话安全:启用 cookie_httponly、cookie_secure、cookie_samesite,登录后 session_regenerate_id

四 入侵排查与应急响应

  • 可疑后门特征搜索:
    • grep -r --include=*.php ‘[^a-z]eval($_POST’ .
    • grep -r --include=.php 'file_put_contents(.$_POST’ .
    • find /data/wwwroot -type f -name “*.php” | xargs grep “eval(”
  • 查找近期被修改的 PHP 文件:
    • find /data/www -mtime -3 -type f -name “*.php”
  • 图片马检测:检查 GIF/JPG/PNG 是否内嵌 PHP 代码或被改名伪装。
  • 权限与属性核查:
    • 生产代码目录建议 444/555(只读/只执行),对 上传/缓存 等确需写入的目录单独放开;必要时限制 chmod/chown 等可被滥用的函数。
  • 取证与恢复:隔离可疑文件、保留 access/error/php_error 日志、从干净备份恢复,修复漏洞后再上线。

五 运维与监控

  • 日志集中与审计:集中采集 Nginx access/error、PHP-FPM 慢日志与错误日志,设置告警规则(如异常 4xx/5xx、上传失败激增、可疑 UA)。
  • WAF 与防护:部署 ModSecurity 或云 WAF,拦截 SQLi、XSS、RFI、LFI、Webshell 等常见攻击。
  • 变更与合规:上线前 代码审计/安全测试(如 OWASP ZAP、Burp Suite),定期 依赖与组件漏洞扫描,严格 变更审批与回滚预案
  • 备份与演练:定期 全量与增量备份,并演练 入侵恢复 流程。

0