ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

2条命令跑通Semgrep代码扫描

2026/9/10 22:24:41 拓冰建站 浏览量
2条命令跑通Semgrep代码扫描 2条命令跑通Semgrep代码扫描【免费下载链接】semgrepLightweight static analysis for many languages. Find bug variants with patterns that look like source code.项目地址: https://gitcode.com/GitHub_Trending/se/semgrep接手一个老项目想弄清哪些文件还留着print()调试语句、哪行代码在把同一个变量跟自己比较你可以用 Semgrep 代码扫描在几分钟内把全仓库扫一遍。它用类源代码的模式代替正则支持 30 多种语言规则写成 YAML 就能用。下面所有命令都在本地执行代码不会上传到任何服务器。 装好并跑出第一条扫描结果想尽快看到输出装完直接跑就行python3 -m pip install semgrep semgrep scan -e $X $X --langpy your-code-dir$X是元变量代表任意标识符这条模式的意思是找出所有左右两边是同一个变量的比较也就是经典的a a笔误。终端里会打印出文件路径、行号和匹配到的代码片段你可以直接跳过去看一眼。上面是一次真实扫描的输出Semgrep 自动从规则注册表加载了一批规则终端先列出各语言用多少条规则匹配多少个文件再逐条给出发现的规则 ID 和说明信息。 写一条自己的规则并本地跑通一次性模式方便但不方便复用所以把它固化成一个规则文件。需求是找出生产代码里的print()最小规则长这样rules: - id: no-print-in-prod languages: [python] pattern: print(...) message: use a logging library instead of print severity: INFO...匹配任意个参数而模式和正则的区别在于它按语法匹配print(a, b)、print(f...)都会命中。把文件存成myrule.yml先校验格式再正式扫描semgrep scan --validate myrule.yml semgrep scan --config myrule.yml your-code-dir上半部分是这条规则的定义下半部分是测试代码高亮的print(...)一行就是命中结果。这个仓库自己的 CI 也在用同类规则semgrep.yml可以直接打开参考。 两个值得知道的延伸能力如果你想在合并前确认规则行为正确用--test给规则做单元测试在测试代码里用ruleid: 规则名标出预期命中的行用ok:标出预期不命中的行然后运行semgrep --test myrules/它会直接报告有几处漏报、几处误报。标注写法在cli/tests/的测试用例里可以照着学。当你想把它变成 CI 里的门禁时加上--error只要有发现命令就以非零码退出流水线随之失败再配合--severity ERROR可以只对高危问题设卡。遇到已知误报在对应行尾加# nosemgrep注释或者用--exclude把测试目录排除掉即可。现在打开你手头正在开发的仓库跑一下semgrep scan -e $X $X --langpy .看看有没有藏着的自比较等习惯了这个输出就可以试着把团队的一条编码约定写成上面那样的 YAML 规则。【免费下载链接】semgrepLightweight static analysis for many languages. Find bug variants with patterns that look like source code.项目地址: https://gitcode.com/GitHub_Trending/se/semgrep创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考