Copilot CLI本地安全审查:提交前揪出SQL注入和XSS

代码编写正酣时,你是否想过刚刚键入的查询语句可能潜藏SQL注入风险?无需等待CI流水线跑完,也不必等安全团队发邮件提醒,Copilot CLI的/security-review命令即可在本地终端中直接完成安全审查。该功能自2026年5月20日随1.0.51版本发布后,所有安全扫描均在本机执行,无需连接远程服务器——修改完代码,风险反馈即刻呈现。
先说明前置条件:你的Copilot CLI版本需为1.0.51或更高(运行copilot --version确认),同时必须完成copilot login身份认证,否则后续请求将被全部拒绝。另有一条常被忽略的要点——当前工作目录必须是Git仓库根路径,可使用git rev-parse --show-toplevel 2>/dev/null快速验证。若不在根目录,/security-review会跳过未跟踪文件,导致扫描结果不完整。
三种“姿势”对PHP文件执行安全扫描
日常调试场景大致分为三类,对应的命令行操作略有差异:
第一种,直接审查刚保存的控制器文件。终端执行copilot /security-review app/Controller/UserController.php,Copilot即加载文件,并与内置的67条PHP高危模式规则进行匹配——例如exec($_GET[、unserialize($_COOKIE[、mysql_query(这类经典风险模式均会被捕获。
第二种,仅审查未暂存的修改内容,避免全量文件扫描消耗时间。先用git diff HEAD -- app/Controller/UserController.php提取差异块,再通过管道传递给Copilot:git diff HEAD -- app/Controller/UserController.php | copilot /security-review -。注意末尾的短横线-是必选参数,它指示Copilot从标准输入读取内容,缺少该参数会报错No input file specified。
第三种,批量扫描AI生成的PHP文件。执行copilot /security-review $(git ls-files '*.php' | grep -E 'Generated|AI|Copilot'),自动找出所有包含特定标识的文件逐一检查。但有一项必须提醒:务必先确认grep结果不为空,否则命令会直接失败退出,且不给出任何提示。
看懂审查结果,定位并修复漏洞
扫描结果到手后,通过四步操作即可完成从警告到修复的闭环。
第一步,识别警告级别。输出中以⚠️ CRITICAL开头的是高危漏洞,例如⚠️ CRITICAL [SQLi-03] Found raw $_POST usage in query concatenation at line 42;? INFO则为建议项,一般不影响安全但值得注意。
第二步,精确定位。复制警告中的行号(如line 42),使用sed -n '42p' app/Controller/UserController.php直接打印该行代码,无需手动翻页查找。
第三步,判断是否为真实漏洞。若警告指出mysql_query("SELECT * FROM users WHERE id = " . $_GET['id']),立即检查该变量是否经过intval()过滤或使用了PDO预处理——未经参数化处理的字符串拼接即视为可利用,无需额外构造PoC验证。
第四步,应用修复方案。在VS Code中打开该文件,将光标停在问题行,按下Ctrl+I调出Copilot聊天框,输入@security fix this SQL query。Copilot会基于当前上下文生成带绑定参数的PDO语句,并直接插入到合适位置。
集成到pre-commit钩子,自动拦截高危提交
若希望在团队协作中默认开启安全审查,最简便的方法是在Git的pre-commit钩子中配置扫描。创建.git/hooks/pre-commit文件,写入以下内容:
#!/bin/sh
copilot /security-review $(git diff --cached --name-only --diff-filter=ACM | grep '.php$') || exit 1
赋予执行权限:chmod +x .git/hooks/pre-commit。此后每次git commit,钩子将自动扫描所有新添加、修改、重命名的PHP文件。此钩子仅扫描暂存区(staged)文件,未git add的修改不会触发检查。若想覆盖全部改动,将--cached替换为--no-index即可。
配置完成后,执行git add . && git commit -m "fix login logic"时,若扫描发现CRITICAL级漏洞,提交将被直接中断,终端会清晰显示具体风险位置和修复建议。该机制能在代码进入仓库前拦截隐患,比事后排查高效得多。
