用 Semgrep 静态分析把代码模式变成可执行的检查规则 用 Semgrep 静态分析把代码模式变成可执行的检查规则【免费下载链接】semgrepLightweight static analysis for many languages. Find bug variants with patterns that look like source code.项目地址: https://gitcode.com/GitHub_Trending/se/semgrepSemgrep 是一款开源的静态分析工具它用长得像代码的模式搜索代码在多语言项目中找出 bug 变体和安全隐患。适合想零成本启用代码扫描、又不想写正则或 AST 规则的开发者。最快完成首次 Semgrep 扫描的方法 这个场景能做到不改任何配置对现有项目跑一次扫描在终端里直接看到问题清单。先安装只需一行python3 -m pip install semgrep然后在项目根目录执行# auto 模式会按项目里出现的语言自动加载匹配的规则 semgrep scan --config auto屏幕上会先看到 Semgrep 探测到的语言、每种语言适用的规则数和文件数接着进度条走完进入 Findings 区域。每条结果给出文件路径、规则 ID点分命名的唯一标识、规则里写好的修复建议以及被命中的那一行代码和行号——比如截图里app.js第 10 行的 Express 应用就因为没启用 CSRF 中间件被点名。如果手边还没有规则文件也可以用-e直接在命令行写一个模式搜索# $X 是元变量匹配任意表达式能抓到 a a 这类自比较 semgrep -e $X $X --langpy src/如何写出第一条 Semgrep 自定义规则 ✍️这个场景能做到用一个几行的 YAML 文件把你的某条编码约定变成全仓库的自动检查。以禁止subprocess.run开启shellTrue为例规则文件只需这些字段rules: - id: python-no-shell-true languages: [python] severity: WARNING message: 避免 shellTrue请改用参数列表形式 pattern: subprocess.run(..., shellTrue, ...)pattern里写的就是你平时写的那行代码...表示这里可以有任何参数$X这类元变量表示这里可以是任意表达式。不需要了解语法树模式怎么写代码规则就怎么写。semgrep scan --config no-shell.yaml src/想参考现成写法仓库里有两处可直接翻perf/r2c-rules/ 是 Python、Java、Go 等多语言的成品安全规则包tests/patterns/ 则有成百上千对规则 测试代码能看到各种patterns组合的匹配边界。把 Semgrep 接入 pre-commit 持续运行 ⚙️这个场景能做到每次git commit前自动跑一遍规则有问题的提交直接拦下全团队无法绕过。# .pre-commit-config.yaml最小配置 repos: - repo: local hooks: - id: semgrep name: Semgrep 扫描 entry: semgrep scan --config my-rules.yaml --error # 有发现则提交失败 language: system不想扫的文件生成代码、第三方目录写进 .semgrepignore语法与.gitignore相同例如dist/或*.min.js。本仓库自己就是这么做的它的 .pre-commit-config.yaml 在每次提交时用自己的规则扫描自身源码内部叫 dogfooding。接入 CI 时运行semgrep ci即可平台侧对各家 CI/CD 的集成入口如截图所示接下来可以做的事打开 perf/r2c-rules/python.yml对照pattern、pattern-not、pattern-inside的用法把其中一条规则改成适合你项目的版本。挑一条你团队的口头约定比如禁止裸except按上面的最小规则模板写成 YAML在本地跑通后再进 pre-commit。用 tests/patterns/ 里相近的测试用例验证你的规则确认它命中的范围和你预期的一致。【免费下载链接】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),仅供参考