核心是“查配置、扫代码、验行为、看日志”:查PHP配置禁用高危选项与危险函数;扫Composer依赖识别CVE漏洞;用grep定位SQL注入/XSS等高危代码模式并人工复核。

直接在服务器上对PHP应用做安全审计,核心是“查配置、扫代码、验行为、看日志”,不依赖本地开发环境,适合运维或安全人员快速响应线上风险。
检查PHP运行时基础配置
先确认PHP底层是否开启高危选项:
- 运行
php -i | grep -E "(display_errors|register_globals|allow_url_include|allow_url_fopen|disable_functions)",重点确认display_errors=Off、register_globals=Off(PHP 5.4+已移除,但旧部署仍需核对)、allow_url_include=Off; - 检查
disable_functions是否禁用exec、shell_exec、system、passthru等危险函数; - 查看
open_basedir是否设置合理,限制脚本只能访问指定目录,避免路径穿越读取敏感文件。
扫描项目依赖与已知漏洞
进入项目根目录,用Composer工具快速识别第三方风险:
- 执行
composer outdated --direct列出所有未更新的直接依赖; - 运行
composer audit(需提前安装composer-plugin-security),输出含CVE编号的问题包; - 手动比对
composer.lock中关键组件(如 Guzzle、Monolog、Twig)版本,对照Symfony Security Advisories或OSV Database确认是否在受影响范围内。
定位并人工复核高危代码模式
在服务器上用grep快速抓取可疑片段,再逐行分析:
立即学习“PHP免费学习笔记(深入)”;
- SQL注入线索:
grep -r "mysql_query\|mysqli_query\|PDO::query" . --include="*.php",重点看是否拼接$_GET、$_POST变量; - XSS输出风险:
grep -r "echo \$_\|print \$_\|= \$_" . --include="*.php",检查后是否缺失htmlspecialchars(); - 文件操作隐患:
grep -r "include\|require\|file_get_contents\|fopen" . --include="*.php",确认参数是否可控且未校验路径(如$_GET['page']直接传入include); - 反序列化与动态执行:
grep -r "unserialize\|eval\|assert\|create_function" . --include="*.php",这类函数一旦参数受控,极易导致RCE。
验证运行态行为与错误响应
不只看代码,还要观察真实请求反馈:
- 构造测试请求,如访问
/index.php?id=1' OR '1'='1,检查是否返回数据库错误信息(说明display_errors未关或error_reporting过高); - 上传一个带
<?php phpinfo();?>内容的.jpg文件,尝试通过URL直接访问,验证上传目录是否禁用PHP解析(Apache需检查<directory></directory>配置中SetHandler是否被清除,Nginx需确认location ~ \.php$是否排除上传路径); - 查看
error_log位置(php -i | grep error_log),翻阅最近日志,确认是否有Warning: include(): Failed opening类报错——这可能暴露绝对路径,为攻击者提供信息。



















