3分钟快速扫描代码漏洞:semgrep 新手实战
【免费下载链接】semgrepLightweight static analysis for many languages. Find bug variants with patterns that look like source code.项目地址: https://gitcode.com/GitHub_Trending/se/semgrep
代码评审永远老样子:人眼盯不出深处的 SQL 拼接。想跑一次静态代码扫描,传统 SAST(静态应用安全测试)配置太重,semgrep 的模式却长得和源码本身一样。
30秒认清 semgrep:它到底是干什么的
semgrep 是一个在本机跑静态代码扫描的开源工具。说白了它是「懂代码结构的 grep」:覆盖 30+ 种语言,代码默认不上传云端,你写模式,它找 bug、管规范。
你遇到什么,semgrep 怎么解
全仓库搜危险调用,grep 帮不上忙
grep 只能精确匹配字符串:找password = "abc"会漏掉pwd = "abc"。semgrep 的模式直接用源代码写,$X和...代表任意表达式、任意参数列表。连x == x这种自等价低级 bug,一条交互命令就能全仓库捞出来。
团队规范口口相传,没人执行
规范写成几行 YAML,就变成了可执行的检查。比如「凭证不允许写死在代码里」:
rules: - id: no-hardcoded-password languages: [python] message: "密码写死在代码里,改用环境变量读取" pattern: password = "..." severity: ERROR大仓库扫得慢,CI 里历史欠账太多
扫描在本机并行跑,CLI 会实时显示每种语言「规则 × 文件」的进度,大仓库也不卡。更省心的是接进 CI 之后,它只报告当前 PR 新引入的问题——历史欠账不会砸在现在的提交者头上,主流 CI 平台都能一键接上。
第一次扫描该跑哪条命令
最高频的场景是:把整个仓库扫一遍。--config auto会自动匹配仓库语言、拉取社区规则集:
python3 -m pip install semgrep # macOS 上也可 brew install semgrep semgrep scan --config auto ./myapp只想验证一个模式时,交互命令更短:semgrep -e '$X == $X' --lang=py src/,一行找出所有「自己和自己比」的写法。
⚠️ 新手容易翻的 3 个车
- 远端配置要联网、会报指标。
--config auto从规则库拉规则,默认会上报匿名指标;完全离线的场景改用本地规则文件,并加--metrics=off。 - 社区版只看单个函数/文件内部。跨文件的污点流——「用户输入从这儿流到那边的 SQL」——靠一条模式抓不住,那是商业平台的能力,别指望一条 pattern 包打天下。
- 模式不是正则,
$X别滥用。它匹配任意表达式,foo($X)会命中所有foo调用,结果直接爆炸。元变量收窄,或者用pattern-inside限定作用范围。
想看真实规则怎么写的,仓库里 tests/rules/ 有上百个样例;各语言解析器在 languages/ 下。
用不用它,看这几点
适合:中小型项目排查特定模式;把团队规范固化成检查,挂到 pre-commit 或 CI 上;不想把代码上传到任何云端服务。
不适合:正式安全合规场景——跨文件数据流、第三方依赖漏洞扫描、密钥审计,这些得上平台版;或者语言不在支持列表里、需要类型层面的深度分析,那就看别的静态分析工具。
平台版会把扫描结果放到 Web 看板上,按严重度、项目、规则过滤和指派:
现在就动手
打开终端,在你自己的仓库上跑一条semgrep scan --config auto,3 分钟后你会有一份第一轮问题清单。
【免费下载链接】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),仅供参考