展开本页目录
开始前准备什么
- 下载独立练习包,保留 starter、reference 和原始输入。
- Python 3与Semgrep CE;可用SEMGREP_BIN指定已有引擎。
- 使用Claude Code原生功能需相应账号和可用额度;本题作者参考可在本地独立运行。
- 读三正三负样本且不执行
- 让Claude Code按边界生成规则
- 准备本地Semgrep CE
- 运行原生规则测试
- 故意改坏规则确认测试失败
- 核对JSON命中位置
- 重开规则并记录覆盖边界
starter、任务提示、具体输入、作者人工可运行参考与独立验证;不含账号/密钥/运行时数据库。
按本文环境运行,再对照原始输入和正反例。
1. 读三正三负样本且不执行
先读 rules/exercise-shell.py 的3个正例和3个负例;这些样本只交给扫描器,绝不执行 shell。YAML 规则目标是 subprocess.run 的 shell=True。
2. 让Claude Code按边界生成规则
让 Claude Code 先列匹配边界,再生成规则;使用 ruleid/ok 标注期望,不能在失败后删掉正反例来假装通过。
交给目标 AI 工具的任务提示
只为 fixtures 写 Semgrep YAML:匹配 subprocess.run(..., shell=True),不把参数数组默认调用误报。先列 3 个正例/3 个负例,再生成规则;用 ruleid/ok 注释与 --test 实跑。不使用通用 grep 代替 Semgrep,不执行样本中的 shell。3. 准备本地Semgrep CE
安装 Semgrep CE 后运行 python3 reference/verify.py;可通过 SEMGREP_BIN 指向已有引擎,本题不登录云扫描或上传工程。
4. 运行原生规则测试
原生 --test 应让3个正例命中、3个负例不命中;换行和关键字参数顺序由语法匹配处理,不使用文本 grep 代替。
5. 故意改坏规则确认测试失败
验证脚本把临时规则故意改成 shell=False,原生测试必须失败。这条失败是验收探针,不是要修回样本代码。
6. 核对JSON命中位置
原生 scan JSON 应定位样本第3、5、7行,回读真实 rule ID 和路径;查看器只是展示真实子进程记录,不是 Claude/Semgrep 产品界面。
7. 重开规则并记录覆盖边界
从最终材料重跑测试,保留引擎版本和未覆盖调用形式。固定样本绿灯不证明数据流、别名或整个程序安全;扩展规则时先加入新的独立期望。
怎样确认已经完成
- 本题全部正例命中、负例不命中,原生 --test 成功;故意删除匹配分支时测试失败。
- 独立 scan JSON 的位置/rule ID 与预期样本对应,而非只看 AI 的完成回复。
- 样本从未被执行;alias/动态参数未覆盖时如实说明,不以测试绿灯宣称全面安全。
常见问题
Claude Code 能帮我写公司自己的代码扫描规则吗?
让 Claude Code 先列匹配边界,再生成规则;使用 ruleid/ok 标注期望,不能在失败后删掉正反例来假装通过。
AI 写的安全扫描规则误报很多,怎么验证?
原生 --test 应让3个正例命中、3个负例不命中;换行和关键字参数顺序由语法匹配处理,不使用文本 grep 代替。
哪些结果已执行,哪些仍需原生账号验证?
Semgrep CE 1.181.0原生--test及scan已验3正例/3负例和故意改坏规则失败,样本从未执行;Claude Code会话和全面安全审计未执行。




