ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Semgrep 实操指南:三步完成第一次代码扫描并接入 CI

Semgrep 实操指南:三步完成第一次代码扫描并接入 CI Semgrep 实操指南三步完成第一次代码扫描并接入 CI【免费下载链接】semgrepLightweight static analysis for many languages. Find bug variants with patterns that look like source code.项目地址: https://gitcode.com/GitHub_Trending/se/semgrepSemgrep 是一款开源静态分析工具把扫描规则写成“长得像源码”的代码支持 30 多种语言适合想为项目补充代码缺陷与安全检查的个人开发者和团队维护者。下面按三个任务推进先跑通扫描再写自己的规则最后接入 CI。✅ 让第一次扫描跑通安装 Semgrep 并完成验证第一步获取代码并安装 CLI。克隆仓库后安装依赖git clone https://gitcode.com/GitHub_Trending/se/semgrep cd semgrep pip install -e .配置文件位于 cli/pyproject.toml-e表示开发模式安装后续改动本地代码可以即时生效。如果只想使用发行版pip install semgrep一条命令即可不必克隆源码。第二步执行扫描并读懂输出。进入目标项目根目录运行semgrep scan --config auto--config auto会根据项目里出现的语言自动挑选规则集。输出分两部分顶部是按语言汇总的规则数与文件数截图所示为 54 条规则覆盖 36 个文件外加 js、json 各自的规则随后逐条列出发现项包含文件名、规则 ID、说明和触发行。看到类似结构就说明工具可用了。两个使用细节值得注意一是它按语法匹配而非按字符匹配模式$X $X能命中任意变量名的a a二是 auto 配置需要访问远端规则库若环境不通网络可以跳过这一步直接用本地规则文件方法见下一个任务。 写出自己的规则拦截 Python 项目里的 print() 调用内置规则覆盖不了团队自己的约定这时需要自己写。规则是 YAML 文件一条规则由四要素组成唯一id、适用语言languages、提示语message、匹配条件pattern。以“禁止生产代码使用 print()”为例rules: - id: python-no-prints-in-prod languages: [python] message: Use logging.debug() instead of print() pattern: print(...) severity: INFO把它存为项目内的rules/no-prints.yml再用--config指向它semgrep scan --configrules/no-prints.yml .pattern中的...是通配符表示匹配任意参数的 print 调用。运行后输出里只会命中这一条规则截图中高亮的就是被规则匹配到的 print 语句。还可以用patterns复数组合多个条件比如用pattern-inside把范围限定在“导入了 yaml 的文件内”条件越精确误报越少。⚙️ 接入 CI让每次提交都自动触发扫描规则定型后把执行交给流水线。Semgrep 官方提供了 GitHub Actions、GitLab CI、Jenkins 等平台的集成入口在 pull request 上触发时只报告本次 PR 新引入的问题历史存量不会阻塞新代码。在工作流里加一个 step 即可- name: Run Semgrep on PR uses: returntocorp/semgrep-actionv1 with: config: auto如果想让规则跟着仓库版本走把config改成规则文件的相对路径之后检查标准与代码同一次提交、同一次回滚。避开这些坑新手高频的三个问题扫描很慢怎么办auto 配置会加载全量规则耗时大致与规则数成正比。用--config收窄为本地规则子集并用--exclude跳过生成目录和依赖目录。发现项都是问题吗社区版分析范围限于单个函数或文件存在误报。逐条核对规则 ID 与说明确认长期误报后用--exclude-rule规则id排除而不是整单忽略。与现有 Python 环境冲突改用 Dockerdocker run -it -v ${PWD}:/src semgrep/semgrep在隔离容器内直接扫描免去本地安装的依赖冲突。延伸学习沿这些路径继续深入现成的安全规则模板perf/r2c-rules/其中 python.yml、javascript.yml 可直接复制改写海量匹配模式案例tests/patterns/三千多个 pattern 测试用例数据流污点规则示例tests/tainting_rules/了解 source 到 sink 的写法规则字段定义interfaces/rule_schema_v1.yaml遇到不认识的字段时查阅。下一步建议先在自己的小项目上跑一次--config auto从结果里挑两三个真实存在的问题把它们改写成第一份自己的规则文件。【免费下载链接】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),仅供参考
返回列表