Semgrep SAST 扫描器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/semgrep-sast-scanner-skill。
技能介绍
要解决的问题
多语言仓库里的 SAST 规则往往两头不讨好:太松,报告里全是噪音,开发者直接关掉检查;太紧,真实缺陷被误报淹没。另一个更实际的麻烦是扫描结果进不了流程——报告格式和 CI 门禁对不上,安全同学只能把发现贴进 issue,再手工核对 CWE 编号。这个技能把 Semgrep CLI 的调用方式固化下来,让规则选择、输出格式和结果标注走一条固定路径,省掉每次接入时的重新摸索。
技能如何工作
核心是三个动作:
- 用
--config=auto让 Semgrep 自己挑选规则集,默认瞄准 OWASP Top 10 的常见模式,不需要手写规则文件。 - 用
--sarif输出结果。SARIF 是 CI 平台通用格式,可以直接对接 GitHub Advanced Security,让发现出现在 PR 检查里,而不是只躺在本地日志里。 - 给每条命中标注对应的 CWE,方便按弱点类别聚合和排优先级,而不是只盯着行号和消息文本做判断。
一次典型扫描中,技能在工作区执行 semgrep,收集 SARIF 产物,再解析成带 CWE 标签的 finding 列表。上层工具拿到的是结构化结果,可以直接渲染成表格,也可以拿来决定是否阻断合并。
适用边界与注意点
- 这是静态分析,不做动态执行。跨函数的数据流、运行时配置错误、依赖库自身的漏洞,需要别的工具补齐。
--config=auto解析的是 Semgrep 托管的规则,上游更新后规则集可能漂移。需要可复现的结果时,应显式指定配置而不要依赖 auto。- 使用托管规则和 GitHub Advanced Security 集成需要 Semgrep 账号和有效 token;离线或严格内网环境要换成本地规则包。
- 语言覆盖取决于 Semgrep 的支持范围,稀有语法或内部 DSL 可能没有现成规则。
使用场景
- 代码提交前检查:在 PR 阶段自动运行 SAST 扫描,利用 SARIF 输出让 GitHub Advanced Security 在合并前显示安全发现,避免漏洞代码合入主干。
- OWASP Top 10 合规检查:对新项目或存量项目做安全基线扫描,使用 --config=auto 自动选择针对 OWASP Top 10 常见模式的规则集,输出带 CWE 编号的发现列表。
- 多语言仓库统一扫描:在一个包含多种语言(如 Python、Go、Java)的 monorepo 中,一次性运行静态分析而无需为每种语言单独配置规则,获取跨语言的统一安全报告。
- CI 门禁自动化:在流水线中配置扫描步骤,当发现高危 CWE 类别的缺陷时阻断合并,同时保留 SARIF 报告供 GitHub Advanced Security 展示和追踪。
适合人员
- 后端开发者:需要在合并代码前确认没有明显的 OWASP Top 10 安全缺陷,希望扫描结果直接出现在 PR 检查中,而不是手动翻看日志。
- DevSecOps 工程师:负责把 SAST 扫描接入 CI/CD 流水线,需要 SARIF 格式输出来对接 GitHub Advanced Security,并要求每条发现带 CWE 标签便于分类统计。
- 安全审计人员:定期对代码库做合规检查,需要生成可追踪的漏洞报告,每条发现都有对应的 CWE 编号方便和漏洞库对照。