检测PHP项目漏洞需静态查代码、动态验行为、配置看环境三步结合:静态扫描揪出危险函数调用与不安全模式;动态测试模拟攻击验证可利用性;配置核查发现部署与PHP设置缺陷;人工审计补位逻辑漏洞。

检测PHP项目里的漏洞,核心是“静态查代码 + 动态验行为 + 配置看环境”三步结合。光靠工具扫不出逻辑漏洞,只靠人工又容易漏掉危险函数调用,必须分层推进。
一、静态扫描:快速揪出危险函数和常见模式
在不运行代码的前提下,分析源码结构,重点识别高危调用和不安全写法:
- 用PHP Security Checker或SonarQube(PHP插件)扫描composer依赖和基础代码,能发现已知CVE关联的组件风险
- 用PHPStan + 自定义规则或Psalm检测未校验的
$_GET、$_POST直传到eval()、system()、include()、preg_replace('/.*/e')等执行类函数 - 重点关注
unserialize()调用点——若参数来自用户输入且无白名单机制,极可能触发反序列化RCE - 检查文件上传逻辑:是否仅校验
$_FILES['type']?是否缺失扩展名+MIME双重验证?是否允许.php或.phtml绕过?
二、动态测试:模拟攻击验证真实可利用性
让代码跑起来,用真实请求试探响应,确认漏洞是否真能被利用:
- 用Burp Suite拦截接口请求,批量注入SQLi/XSS常见payload(如
' OR 1=1 --、<script>alert(1)</script>),观察报错、回显、跳转或状态码变化 - 用OWASP ZAP做自动化爬取+主动扫描,它会尝试路径遍历(
../../etc/passwd)、目录枚举、HTTP头注入等 - 对登录、密码重置、订单提交等关键流程,手动构造越权请求(如把
user_id=1001改成user_id=1002),验证权限控制是否服务端强制 - 上传带
<?php phpinfo(); ?>的图片马,再通过文件包含或解析漏洞触发执行,确认RCE链是否完整
三、配置与环境核查:常被忽略但一击致命
很多漏洞不源于代码本身,而来自部署疏忽或PHP配置缺陷:
立即学习“PHP免费学习笔记(深入)”;
- 检查
php.ini:是否禁用disable_functions = system,exec,passthru,shell_exec,proc_open,popen?是否开启open_basedir限制文件操作范围? - 确认
display_errors = Off且log_errors = On,避免错误信息泄露绝对路径、数据库结构等敏感内容 - 查看Web服务器配置:Nginx/Apache是否禁止直接访问
.git、.env、config.php等敏感文件?是否过滤.php.swp、.php~等编辑器备份? - 验证HTTPS与安全头:是否设置
Strict-Transport-Security、X-Content-Type-Options: nosniff、Content-Security-Policy?
四、人工审计补位:盯住工具看不见的逻辑死角
自动化无法理解业务意图,比如“用户A能否删B的文章”、“支付金额能否被前端篡改”,这类需人脑推演:
- 从入口路由(如
index.php、Laravel的routes/web.php)开始,顺藤摸瓜追踪参数流向:输入→校验→处理→输出 - 重点审控制器中是否缺失
auth中间件、模型层是否绕过权限检查、回调URL是否未校验来源域名 - 检查日志记录:是否记录了敏感操作(如密码修改、资金转账)?日志内容是否脱敏?
- 用Xdebug单步调试可疑逻辑,观察变量值、分支走向,尤其关注条件判断中使用用户输入作为开关的情形



















