Semgrep 快速入门扫描第一个代码并编写规则全流程拆解【免费下载链接】semgrepLightweight static analysis for many languages. Find bug variants with patterns that look like source code.项目地址: https://gitcode.com/GitHub_Trending/se/semgrep合并 PR 前你要逐行翻 diff 看有没有人留下硬编码密码、debug print。代码库一大人肉审查就不可靠了。Semgrep 解决的就是这类问题用代码形状的模式做静态代码扫描本地运行代码不出机器3 秒内出第一条结果。3 条命令跑通第一次扫描这节从空环境走到第一条扫描输出。步骤 1安装。pip install semgrep一条 pip 命令无额外依赖macOS 也可以换brew install semgrep。步骤 2拿一个有代码的扫描对象。git clone https://gitcode.com/GitHub_Trending/se/semgrep cd semgrep这个仓库作为练习对象cli/src 下有上百个 Python 源文件足够试出扫描效果。步骤 3跑第一条模式扫描。semgrep -e $X $X --langpy cli/src-e参数接收一条临时模式匹配所有变量和自己比较的恒等式。你会在终端看到 3 秒内逐行列出每个命中文件的路径和行号。完整走一遍用自动规则集扫描真实目录这节以仓库自己的目录为对象完整走一遍输入 → 操作 → 输出。输入是 cli/src/一个只含 Python 的目录。操作是一条命令semgrep scan --config auto cli/srcauto 会自动检测目录的语言构成拉取对应社区规则集开始扫描。你会看到开头列出目标包含哪些语言、每种语言匹配多少规则、多少文件随后进度条走完Results 区域给出结果列表。典型输出长这样输出里有 4 个信息值得读。一是规则 id反向域名式能直接看出它属于哪个语言、哪类问题。二是文件路径和行号方便直接跳转。三是命中的代码片段不用打开文件就知道触发了什么。四是 message一句话说清问题和修法。扫描结束还会打印汇总规则总数、文件总数、耗时、发现数方便你估算自己项目的扫描成本。写你的第一条扫描规则逐字段拆解这节把一个代码习惯变成可复用的规则文件。规则用 YAML 写仓库示例目录 tests/rules/ 里有上百个真实样例。最小结构只有 5 个字段rules: - id: python-no-print languages: [python] severity: WARNING message: 发现 print建议改用 logging pattern: print(...)逐字段拆。id 是规则的唯一标识结果里显示的就是它。languages 声明规则适用语言。pattern 是匹配核心...代表任意参数。想更灵活时用$X风格的元变量捕获任意表达式需要限定上下文时把多个条件包进 patterns 列表比如仓库模板示例里只在 bar($Y) 内部才匹配 foo($X)。把文件存到你自己的工作目录命名为 no-print.yaml跑这条命令验证semgrep scan --config no-print.yaml --validate cli/src--validate会逐字段检查规则文件缺字段或拼错会直接报出位置不用等扫描失败才发现。接进 CI 只需一段 YAML这节把扫描变成每次提交的强制检查。把下面这段 GitHub Actions 工作流放进你自己项目的 .github/workflows/ 目录name: semgrep on: [pull_request] jobs: semgrep: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - uses: semgrep/semgrep-actionv1 with: config: p/security生效后每个 pull request 都会触发一次扫描有问题构建失败挡住合并。config 指向官方安全规则集随时可以换成你上一条规则文件的路径。CI 之外pre-commit 钩子里跑一行semgrep scan也能在本地提交前拦截。避坑清单扫大 monorepo 超时 → auto 规则集会对所有语言全部套用 → 用--lang限语言或只指定子目录。--config auto报拉取注册表失败 → 该规则集需要联网访问规则注册表 → 离线环境改用--config指向本地规则文件。规则一条都没命中但语法看着对 → languages 声明和文件扩展名对不上 → 先跑--validate再拿小文件验证。结果列表太长看不完 → 社区规则集含大量低严重度发现 → 加--severity ERROR只看高危。semgrep ci提示要登录 → 该子命令面向平台协作、需要账号 → 纯本地使用就用semgrep scan。延伸入口三份材料够你继续往下挖。官方文档与使用说明README.md规则示例目录tests/rules/贡献与社区协作CONTRIBUTING.md下一步可以做一个具体动作先在你自己的项目上跑一次--config auto再把团队的一条编码约定写成规则接进 CI让扫描从能跑变成能卡口。【免费下载链接】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),仅供参考