关键在分两层动手:先查php解释器本身是否带已知cve缺陷,再查composer.lock中依赖包是否存在通报漏洞;两者缺一不可,光扫代码不查版本或只看依赖不验php二进制都会漏掉高危风险。

检测PHP环境与依赖漏洞,关键在分两层动手:一层查PHP解释器本身是否带已知CVE缺陷,另一层查composer.lock里装的包有没有被通报过安全问题。两者缺一不可,光扫代码不查版本,或只看依赖不验PHP二进制,都会漏掉高危风险。
检查PHP解释器版本漏洞
本地PHP是否在已知漏洞影响范围内,得靠专门比对CVE数据库的工具:
-
Versionscan最轻量,支持离线指定版本扫描,命令简单:
versionscan --php-version 8.1.25,还能按CVE严重性排序、导出HTML报告 - PHP Malware Finder(PMF)配合YARA规则,能识别特定版本中修复过的漏洞行为模式,比如PHP 8.0.28的ZipArchive内存越界触发特征
- RIPS可对PHP二进制文件做指纹识别,自动关联NVD通告,还能覆盖opcache、gd等扩展模块的漏洞暴露面
扫描项目依赖中的安全风险
第三方包是漏洞主要来源,必须定期检查composer.lock:
-
Composer原生命令(≥2.5):
composer security:check,离线比对Symfony安全公告库,隐私友好,加--format=json便于CI集成 -
PHP Security Checker PHAR:适合无法升级Composer的场景,下载后直接运行
php security-checker.phar security:check ./composer.lock - Local PHP Security Checker(Go编写):所有分析本地完成,支持自定义缓存和离线模式,适合高隐私要求环境
-
composer audit:每天必跑,它查的是Packagist官方advisory数据,70%线上RCE来自过时的monolog或guzzlehttp,CI中建议加
--no-dev --strict
嵌入开发流程的安全审计
把检测变成日常动作,才能防患于未然:
-
phpcs-security-audit作为PHP_CodeSniffer规则集,专卡
eval()、system()等危险函数调用,在CI/CD提交前拦截,速度快、误报可控 -
PHP Insights启用
ForbiddenSecurityIssues洞察,自动读取composer.lock并联网查漏洞,支持JSON输出和质量阈值配置 - 写Shell脚本整合多个工具,用
crontab定时执行,日志统一归档,避免人工遗漏
补充:别忽略运行时配置
工具扫不到的部分,得靠人工核查:
- 检查
php.ini是否禁用exec、shell_exec等函数,是否开启open_basedir限制 - 确认
display_errors = Off,防止错误信息泄露路径、版本等敏感细节 - 验证
allow_url_include = Off,杜绝远程文件包含可能
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











