资讯详情

10 分钟用 Semgrep 跑通第一遍代码安全扫描,规则怎么写、误报怎么治

📅 2026/9/10 22:24:57 | 华诺云谱 👁 阅读
10 分钟用 Semgrep 跑通第一遍代码安全扫描,规则怎么写、误报怎么治
10 分钟用 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 合并进了主干直到上线前评审才被翻出来。Semgrep 能帮你把这类问题拦在合并之前——它是一款轻量级静态代码分析工具规则长得像源码扫完逐文件给出具体行号。 三分钟跑通第一遍 Semgrep 代码安全扫描安装只用一种方式python3 -m pip install semgrepmacOS 可用 brew不装直接跑 Docker 也行一行命令的事。然后进项目根目录semgrep scan --config autoauto 会自动探测项目语言从规则注册表拉取对应规则集。几秒后终端出现 Results每条发现都带规则 id、message 说明、文件与行号并高亮出命中的那一行。上面这个真实输出app.js 第 10 行被规则 express-check-csrf-middleware-usage 标记Express 应用未接 CSRF 中间件bin/www 第 22 行命中 http 明文服务检查。没有登录、没有配置文件第一遍体检就是这样开始的。 读懂你的第一条 Semgrep 规则pattern 的匹配直觉把下面这条规则存成 no-print.yamlrules: - id: no-prints languages: [python] message: 生产代码避免 print改用 logging pattern: print(...) severity: INFOsemgrep scan --config no-print.yaml五个字段各司其职重点看 pattern...是通配符匹配任意参数列表所以print(...)命中一切print()调用——不管传几个参数、传什么。更妙的是它匹配的是语法结构而非文本字符串里出现print(xxx)字样不会报print (x)这种写法也会报。想写自己的 Semgrep 规则记住这条就够了pattern 写代码片段Semgrep 负责在 AST 层面找所有同构位置。不写文件也能试单条模式semgrep -e $X $X --langpy .$X是捕获变量代表同一表达式a a、user user这类自己和自己比较的笔误都会被打出来。 把 Semgrep 挂进 CI选对规则集每次提交自动体检规则集按用途挑auto面向整个项目、按语言自选规则适合本地摸底p/security是安全向组合包适合当 CI 守门p/owasp-top-ten则对应 OWASP 十大类风险。以 GitHub Actions 为例加四行- uses: semgrep/semgrep-actionv1 with: config: p/security收益很具体以前靠人肉 review 兜底的 SQL 拼接、明文 http、硬编码 token现在每次 push 都会先过一遍规则发现拦在合并前责任落在具体某次提交上。本地--config auto、线上p/security两套并存即可。 误报太多.semgrepignore、参数筛选与模式写法的避坑姿势第一遍 auto 扫出一堆没毛病的结论很正常治理路径按顺序走项目根放一个.semgrepignore写法同 .gitignore一行一个目录比如vendor/、dist/、生成的代码目录。缩小范围--langpy只扫 Python--include/--exclude按路径模式包含或排除两者都命中时跳过该文件。单条规则不认可--exclude-rule规则id直接排除临时放行某一行也可在代码里加 nosem 注释。模式写法上两条最常用...吞任意数量的参数$VAR捕获单个表达式且可在一条规则内反复引用$X $X就是靠它成立的。别用正则思维写 pattern——你写的是代码不是字符串。仓库 tests/rules/ 下有大量带对应测试代码的示例每看一组就能校准一次匹配直觉。下次评审前复制这条命令进项目根目录跑一遍semgrep scan --config p/security --exclude vendor --exclude dist开头那条 SQL 拼接就会以一行带行号的发现形式停在合并按钮之前。【免费下载链接】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),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。