适用场景
- 接手上线前做一次代码体检
- 漏洞通报后快速定位危险调用
- 提交前把扫描接入本地钩子
PROMPT
【指令】 1. 写一个 Shell 脚本,批量扫描 PHP 项目里的高危函数与可疑写法,一次覆盖全部 PHP 文件。 2. 脚本直接输出可排序的评测报告,而不是一屏原始日志,报告要能按风险等级与路径排序。 3. 脚本要能在测试机一次跑完,不依赖分次执行,也不靠人工翻页确认结果。 4. 全程只读,中途不修改任何文件,不写入项目目录,也不创建临时中间文件。 【上下文】 1. 项目在 /www/ai363,PHP 8.2,代码走 Git 管理,扫描范围按仓库相对路径定位文件。 2. 扫描过程只读,禁止执行项目业务代码,不加载框架自动加载器,不引入任何运行时依赖。 3. 遇到二进制与压缩包直接跳过,不解压、不做字符串提取、不计入统计分母。 4. 结果按仓库相对路径输出,路径前缀统一,便于与 Git 里的文件一一对应。 【输入数据】 1. 扫描 app 与 public 两个目录,排除 vendor、runtime、.git 与 uploads 四处。 2. 重点匹配 eval、assert、system、shell_exec、passthru 五个函数,五个都要在规则里单列。 3. 另查 preg_replace 的 e 修饰符,以及变量函数调用这类以变量名拼出函数名的写法。 4. 命中行要带行号与前后各一行上下文,上下文按原文件行序原样输出,不改写不改缩写。 【输出要求】 1. 输出完整脚本与使用说明,说明写清参数表、报告输出位置与退出码含义。 2. 支持 dry-run 参数,只打印扫描范围与命中统计,不落盘任何报告文件。 3. 报告按文件路径与行号排序,同一文件内行号升序,跨文件按路径字典序。 4. 每行含风险等级、命中片段与修复建议,风险等级分高、中、低三档并给出判定依据。 5. 最后给三条人工复核优先级,写清先看哪类命中、后看哪类,以及跳过的例外情形。