Semgrep 静态代码分析实用指南:用看起来像源码的规则找出 Bug

发布时间:2026/9/10 14:53:45
Semgrep 静态代码分析实用指南:用看起来像源码的规则找出 Bug Semgrep 静态代码分析实用指南用看起来像源码的规则找出 Bug【免费下载链接】semgrepLightweight static analysis for many languages. Find bug variants with patterns that look like source code.项目地址: https://gitcode.com/GitHub_Trending/se/semgrep代码审查全靠肉眼总会漏掉 Bug 的变体硬编码的密码、生产分支里留下的 print、多写的一组等号都容易被放过。Semgrep 是一个静态分析工具把这类检查写成看起来像源码的模式。你写下print(...)它就能在项目里找出所有 print。从安装到接入 CI只需下面几步。安装 Semgrep 并确认环境可用依赖是一个 Python 包pip 安装即可。不想装 Python 依赖也可以直接用官方 Docker 镜像跑python3 -m pip install semgrep semgrep --version第二条命令打印出版本号就说明环境就绪可以开始扫描。用一条命令跑完首次扫描进入你的项目根目录执行自动配置扫描semgrep scan --config autoauto 模式会从 Semgrep 规则注册表拉取规则按语言分批扫描。输出分两部分前半段是各语言的覆盖情况下图例子里 54 条规则检查了 36 个文件另有 179 条 JavaScript 规则和 4 条 JSON 规则后半段是 Findings 列表每条命中给出规则 ID、文件和行号比如一个 express 应用缺少 CSRF 中间件。不写任何规则这一步就能看清项目的常见问题。让扫描贴合你的项目写自定义规则盯住团队规范Semgrep 的价值在于把团队约定变成规则。规则文件就是一小段 YAML比如禁止生产代码使用 printrules: - id: python-no-prints-in-prod languages: [python] message: Use logging.debug() instead of print() pattern: print(...) severity: INFO存为no-prints.yml运行semgrep scan --config no-prints.yml .。项目里每个print调用都会被定位到行并附上你写的 message。用常用参数缩小扫描范围不是每次都要全量扫描。几个常用参数--langpy只解析 Python 文件-e PATTERN直接在命令行给一个模式不写规则文件--exclude排除测试目录或生成代码它们可以任意组合。比如semgrep -e $X $X --langpy src/能找出所有自己等于自己的比较这几乎一定是笔误。把扫描接进 CI 流水线靠人记着去跑扫描迟早会漏。把扫描放进 CI让每个 pull request 都被扫一遍。semgrep ci是为 CI 设计的命令命中会输出结构化结果并让流水线失败。GitHub Actions 的最小配置- name: Semgrep Scan uses: returntocorp/semgrep-actionv1 with: config: auto支持的平台还包括 GitLab CI/CD、Jenkins、Bitbucket、CircleCI、Buildkite 和 Azure Pipelines。仓库里有现成的端到端测试目标可参考 CI 的接法cli/tests/default/e2e/targets/ci/。深挖官方规则与测试样例perf/r2c-rules/内置安全规则集Python、JavaScript、Java、Go 等各有一个文件是学写规则的起点tests/patterns/上千个模式测试用例每个都是模式 → 期望结果学匹配语法最直接的教材cli/tests/default/e2e/targets/端到端扫描的示例项目覆盖自动修复、忽略配置、多语言目标等场景README.md官方文档入口附完整支持语言列表【免费下载链接】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),仅供参考